我认为之前关于这个主题的任何问题都没有给出这个问题的答案。我使用 psexec 执行远程 exe 文件。当我在命令行中运行它时,我得到了 exe 文件的输出。psexec.exe \\machine C:\somename.exe
.
当我使用 C sharp Process Execution 时,它要么挂起,要么不重定向输出。对于某些 exe,它超时,对于某些重定向标准输出为空,并且错误包含 Exe 退出,代码为 0。有什么方法可以捕获输出?
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName =GetPsExecPath();
startInfo.Arguments = arguments;
Debug.WriteLine(arguments);
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
error = process.StandardError.ReadToEnd();
output = process.StandardOutput.ReadToEnd();
Debug.WriteLine(error);
Debug.WriteLine(output);
process.close();
编辑:Soln 所以这个问题主要是因为 Psexec 把很多其他的东西扔到了标准错误中,因此我们读取它们的顺序,如果我们使用 ReadToEnd() 可能会导致死锁。所以如果我们使用 BeginOutputReadLine 它就像一个魅力!