繁体   English   中英

Process.Start不输出完整的输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM