1

サードパーティの .dll を使用して特定のファイルを処理するときに、例外をスローせずにクラッシュする ac# Windows サービス アプリケーションがあります。私がやろうと決めたのは、Windows サービス コードのごく一部、特にサービスがクラッシュする原因となる部分を複製する新しいコンソール アプリケーションを作成することでした。私がやりたいことは、Windows サービスから新しい .exe プログラムを呼び出すことです。それがクラッシュした場合は、自分で例外をスローします。

そのため、この .exe プログラムを呼び出して (処理するファイルが安全であることがわかるまで Windows サービスを続行できないため、バックグラウンドではありません)、正常に終了したかどうかを判断する必要があります。どうすればこれを行うことができますか?私が見た例では、.exe をバックグラウンド プロセスで実行していますが、これは私が望んでいるものではありません。

ありがとう。

4

1 に答える 1

3

this SO answer how to run console application from windows service を見てください。次のように、WaitForExit を追加するだけです。

ProcessStartInfo info = new ProcessStartInfo(@"c:\myprogram.exe");
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.WindowStyle = ProcessWindowStyle.Hidden;

Process process = Process.Start(info);
process.WaitForExit();

Environment.Exit(statusCode)コンソール アプリケーションでは、コンソール アプリケーションのメイン関数で終了するか、int 値を返す場合に、終了コードを設定できます。または、出力に書き込み、サービスで終了コード ( process.ExitCode) または出力ストリームを調べて、プロセスが正常に終了したかどうかを判断できます。

于 2012-06-13T21:52:46.153 に答える