2011-12-14 16 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(); 
     } 

どのように私はこの出力をキャプチャすることができますを作成しましたか?

EDIT

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(); 
     } 

バッチファイルは、私が持っている場合は、私の変数Oで、私はメッセージを取得しない、ここでは "コード10"

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

ある

ここで、「Hel LO」が、私はバッチファイル

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

を変更した場合、私はメッセージを取得していない 『』

任意の助けをこんにちは!

+1

コードにどのような問題がありますか? –

+0

これで作業が始まります。しかし、私は今、別の状況があります。バッチファイル '@echo off call run.bat%* 1> log \ out.txt 2> log \ err.txt @echoはコード%ERRORLEVEL% 終了/ B%ERRORLEVEL%'で終了します。私がcmdからこれを始めると、終了コードが出ますが、私のWindowsサービスではoは空です。 – cashmere

答えて

2

この出力をキャプチャするにはどうすればよいですか?

サービスとして実行していない場合のみ。

実行ファイルは、これらを呼び出さない限り(Win32アプリケーションとして直接または.NETなどの間接的に特定のAPIを呼び出す必要があります)コマンドラインスイッチに基づくロジック)通常の実行可能ファイルです。

サービスとして実行されると、実行可能ファイルはService Control Manager(SCM)によって起動され、標準出力、エラーまたは入力へのアクセスはありません。


サービスを開発し、デバッグするときに便利です:コマンドラインからか、デバッガ内簡単に実行できるよう、「インタラクティブ」モード。

関連する問題