私は奇妙なことに遭遇し、これが起こっている理由を見つけることができません。サービスがハングしてからプロセスを開始するUseShellExecute false
私は構成レジストリからデータを収集し、n個のプロセスを開始するservice.exeを持っています。
サンプルコード:
_mProcess.StartInfo = new ProcessStartInfo
{
FileName = Command,
Arguments = Argument,
WorkingDirectory = WorkDir
};
_mProcess.Start();
Pid = _mProcess.Id;
マイPid
は、プロセスIDが含まれています。
標準出力を取得するためにUseShellExecute = false
を追加しました。
新しいサンプルコード:プロセスは、私は私のログファイルに保存することができます任意のエラーが戻らこの場合
_mProcess.StartInfo = new ProcessStartInfo
{
FileName = Command,
Arguments = Argument,
WorkingDirectory = WorkDir //,
//CreateNoWindow = true,
UseShellExecute = false,
//RedirectStandardOutput = true,
RedirectStandardError = true
//RedirectStandardInput = true
};
_mProcess.Start();
Pid = _mProcess.Id;
using (var reader = _mProcess.StandardError)
{
_logger.ToLog("", Company, reader.ReadToEnd(), "RCluster.log", "service");
}
。
問題:このコードは、私が何度も呼び出すプロセスを開始する方法の一部です(構成によって異なります)。 このコードでは、最初のプロセスが呼び出されますが、次のプロセスは呼び出されません。 何とかサービスが最初のサービスを待っています。私はこれがWaitForExit
としか起こらないと思った。
どのように標準エラー出力を得ることができますが、プロセスを続行するためにメインタスクをブロックしないようにしますか?
プロセスはエラーリーダーがストリームの終わりを見つけるのを待っているので、プロセスが終了するまでブロックされます。別のスレッドまたは非同期タスクでエラー処理を開始します。 – Gusman