[英]Process.Start does not output the full output
我有一个进程P,它调用PSEXEC可执行文件,并将其传递给它一个参数。 我的问题是,当我直接在命令提示符下调用完全相同的命令时,C#程序的输出是不同的。
这是我期望的输出(从CMD运行时):
Server Name Server Load
-------------------- ------------
601CTXD04 0
601CTXD05 0
...
601CTXP03 0
这是实际的输出(从我的程序运行时):
Server Name Server Load
-------------------- ------------
601CTXD04 0
因此,当我从C#程序运行命令时,我仅获得1台服务器。 我通过以下方式调用该过程:
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = cServer.psexec; //Path to the PSEXEC executable
p.StartInfo.Arguments = "-accepteula \\\\601ctxp01 qfarm /load /continue";
p.Start();
string output = p.StandardOutput.ReadToEnd();
string[] lines = Regex.Split(output, "\\r\\n");
我真的不明白为什么,当从C#进程运行时,从CMD运行的完全相同的命令没有给出相同的输出。 请让我知道我在做错什么,因为我目前不知道自己的错误。
似乎问题出在PsExec本身(Sysinternal实用程序)上,因为我尝试了一种名为PAExec的替代方法,并且同一命令运行正常,所以我在我的代码中改用了该命令。
你需要调用p.WaitForExit()
后p.StandardOutput.ReadToEnd()
否则你不会得到来自过程的输出的全部。 不要在p.Start()
之后直接放置它-可能会遇到死锁。 请参阅http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo.redirectstandardoutput%28v=vs.110%29.aspx
一定要有。
p.WaitForExit()
在读取输出的行之后的方法。 这是来自MSDN的解释: http : //msdn.microsoft.com/zh-cn/library/system.diagnostics.process.standardoutput (v= vs.110).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.