2011-12-14 101 views
3

我有控制檯應用ThirdPartyApplications.exe,我必須從Windows服務運行。 控制檯應用程序給我回郵:OK,NOT OK和ERROR。如何從Windows服務讀取控制檯輸出?

我需要在我的Windows服務中捕獲這些響應。

我創建功能

using (var p = new System.Diagnostics.Process()) 
     { 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.FileName = @"C:\ThirdPartyApplications.exe"; 
      p.StartInfo.Arguments = "3"; 
      p.Start(); 
      string o = p.StandardOutput.ReadToEnd(); 

      p.WaitForExit(); 
     } 

我怎麼能抓住這個輸出?

編輯

using (var p = new System.Diagnostics.Process()) 
     { 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.FileName = @"C:\ThirdPartyBatch.bat"; 
      p.StartInfo.Arguments = "file.zip -user.properties"; 
      p.Start(); 
      string o = p.StandardOutput.ReadToEnd(); 

      p.WaitForExit(); 
     } 

批處理文件

@echo off 
call run.bat %* 1>log\out.txt 2>log\err.txt 
@echo code %ERRORLEVEL% 
exit /B %ERRORLEVEL% 

在這裏,在我的變量o,我沒有得到消息 「代碼10」

,如果我有

在這裏,我得到消息「Hel LO」,但如果我改變批處理文件

@ECHO off 
call run.bat %* 1>log\out.txt 2>log\err.txt 
ECHO Hello 
PAUSE 

我沒有得到消息‘你好’

任何幫助嗎?

+1

你的代碼有什麼問題? – 2011-12-14 10:17:30

回答

2

我怎麼能抓住這個輸出?

只有當不作爲服務運行。

如果Windows上的可執行文件沒有調用這些API(例如,基於命令行開關),則必須調用特定的API(直接作爲Win32應用程序或間接在.NET之類的框架下)那麼這是一個正常的可執行文件

當作爲可執行由服務控制管理器(SCM)啓動的服務運行,並且存在於標準輸出,錯誤或輸入的訪問權限。


開發和調試服務時這可能是有用的:「交互式」模式允許容易地在命令行或調試器中運行。