我在SO上看过类似的帖子,但似乎没有一个解决方案(对我有用)。所以张贴“又一个”,希望这个有助于找出错误。这也是SysInternals' Forum
上的交叉发布我已经搜索了这个问题的答案(似乎很多人都在体验它),但似乎没有人找到一个可靠的解决方案。所以我想我会再次提出这个问题,因为这对我们来说非常痛苦。
我正在尝试使用PsExec v2.0在几台远程计算机上启动进程(并行),等待这些进程完成,然后检查错误代码以确保所有成功完成。它似乎在某些机器上工作正常,但不是全部(在同事和客户环境中失败)。以下是如何使用它的代码片段:
foreach (WorkerServer worker in configSection.WorkerServers)
{
Process workerProcess = new Process();
workerProcess.StartInfo.FileName = PsExecLocation;
workerProcess.StartInfo.Arguments = BuildPsExecArguments(worker);
if (configSection.CaptureOutput)
{
workerProcess.StartInfo.UseShellExecute = false;
workerProcess.StartInfo.RedirectStandardError = true;
workerProcess.StartInfo.RedirectStandardOutput = true;
workerProcess.OutputDataReceived += new DataReceivedEventHandler(workerProcess_OutputDataReceived);
workerProcess.ErrorDataReceived += new DataReceivedEventHandler(workerProcess_ErrorDataReceived);
}
workerProcess.Start();
if (configSection.CaptureOutput)
{
workerProcess.BeginOutputReadLine();
workerProcess.BeginErrorReadLine();
}
workerProcesses.Add(workerProcess);
}
foreach (Process process in workerProcesses)
{
process.WaitForExit();
......
如果上面设置了“CaptureOutput”并且代码设置了捕获StdOut和StdErr,那么在某些机器上我们发现远程工作进程已经退出,但是PsExec仍在运行而没有返回退出代码。
到目前为止已尝试/观察的事情:
非常感谢任何帮助。
答案 0 :(得分:0)
我在这样的Git命令行锁定方面遇到了很多问题,所以我写了一个小库来进行流程启动:
这使用std(in | out | err)的Windows管道,并以与System.Diagnostic.Process不同的方式进行互操作。