2011-12-07 49 views
3

我已經創建了一個打印PDF文件的服務。當我通過一個System.Process對象調用FoxitReader,向它發送控制檯命令時,該服務什麼都不做。我討論了Session 0隔離,但我的服務不調用GUI應用程序,它只是在可執行文件中執行命令。爲什麼我的Windows服務無法執行外部應用程序?

這是我的代碼:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.FileName = "FoxitReader.exe"; 
      proc.StartInfo.Arguments = " /t " + '"' + nombreArchivo + '"' + " " + '"' + nombreImpresora + '"'; 
      EventLog.WriteEntry("InboundServicioImpresion", "Comando impresion:" + proc.StartInfo.FileName + proc.StartInfo.Arguments); 
      proc.StartInfo.RedirectStandardError = true; 
      proc.StartInfo.RedirectStandardOutput = true; 
      proc.StartInfo.UseShellExecute = false; 
      proc.Start(); 
      proc.WaitForExit(); 

注:FoxitReader.exe包括在服務包;它安裝在與服務相同的文件夾中。

當代碼錶明它必須做時,服務啓動並寫入事件日誌,並且它不會崩潰或拋出任何異常(每個方法都由try-catch控制)。此外,它能夠將文件從一個文件夾移動到另一個文件夾。唯一不起作用的是用福克斯,Adobe Reader或sumatraPDF打印。

任何想法爲什麼它不工作?

在此先感謝,埃斯特班。

+1

運行爲哪些用戶服務?打印機是否嘗試打印到本地服務所在的盒子或者是網絡打印機? – user957902

+0

您正在重定向輸出但未讀取它。這足以導致程序陷入僵局,等待有人釋放它的輸出。只是不要重定向。 –

回答

2

你在默認運行自己的服務,LocalSystem帳戶?也許它無法訪問打印機。

嘗試改變服務運行和帳戶,可以正常打印FoxitReader並看看是否有效。做出的變化,從Windows服務控制面板小程序配置您的服務時,「登錄」選項卡: http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg

+0

你好,CoreTech。是的,我的服務配置爲在LocalSystem帳戶下運行。 – t3b4n

+0

你可以嘗試將其設置爲用戶帳戶,看看是否有用? (當然可以訪問打印機的帳戶。) – CoreTech

+0

謝謝!這是一個與用戶有關的麻煩。當我將用戶帳戶更改爲我自己的用戶時,流程可能會啓動。 – t3b4n

4

您需要文件的完全限定名稱而不僅僅是文件名。服務的默認路徑設置爲C:\ Windows \ System32(或者根據您的操作系統而定)。

改變這一行:

proc.StartInfo.FileName = "FoxitReader.exe"; 

本(或只是硬編碼它,如果它始終是一個固定的路徑):

proc.StartInfo.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "FoxitReader.exe"); 
+0

感謝您的回答,Russell,我已對我的代碼進行了更改,但仍未完全打印。 – t3b4n

+0

好吧,如果您確信自己確實正在執行正確的可執行文件,那麼您應該捕獲標準輸出和錯誤,並看看他們說了什麼。 –

相關問題