PsExecを使用して.NETコマンドラインツールをリモートで実行しようとすると、奇妙な問題が発生します。
コマンドラインからPsExecを実行すると、正常に実行されて完了します。
コンソールアプリケーションから実行する場合(プロセスを作成し、必要な引数を指定してPsExec.exeを実行する場合)、正常に実行されます。
さまざまなタスクを実行するために使用される社内のカスタムツールから実行すると、タイムアウトするか、正常に完了しません。
これが私が使用しているコードです:
Process p = new Process();
p.StartInfo.FileName = @"C:\PsExec.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
string arg = "-snapshot -display C:\*.msi -s";
p.StartInfo.Arguments = @"\\10.161.203.106 -u user -p pwd -cf C:\FVT.exe " + arg;
Logger.Info(this, "Starting process");
p.Start();
var ended = p.WaitForExit(60 * 1000);
if (!ended)
{
throw new Exception("Process timed out.");
}
Logger.Info(this, "Process ended");
using (StreamReader sr = p.StandardOutput)
{
string buffer = sr.ReadToEnd();
Logger.Info(this, buffer);
}
このコードは、cmd行から、またはスタンドアロンアプリから正常に実行されます。
ここで他に何が間違っているのかわかりません。
社内ツールは新しいスレッドを生成し、その中でこのコードを実行します。
アップデート:
コマンドライン+コマンドラインウィンドウの引数-動作中。同じcmd+args、RedirectOutputを使用したプロセスとして実行-ストールしてタイムアウト時に戻ります。
これは.NETのバグでしょうか?(これは他のプログラム、バッチファイルなどで発生します)。