Process.Start不输出完整输出

时间:2014-11-20 01:05:34

标签: c# .net process psexec citrix

我有一个进程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");

我真的不明白为什么,从CMD运行的完全相同的命令在从C#进程运行时不会提供相同的输出。请告诉我我做错了什么,因为我目前无视我的错误。

3 个答案:

答案 0 :(得分:1)

似乎问题出在PsExec本身(一个Sysinternal实用程序),因为我尝试了一个名为PAExec的替代方法,同样的命令工作正常,所以我在我的代码中使用了这个。

答案 1 :(得分:0)

您需要在p.WaitForExit()之后调用p.StandardOutput.ReadToEnd(),否则您将无法获得该过程的所有输出。不要在p.Start()之后直接放置它 - 你可能会陷入僵局。见http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput%28v=vs.110%29.aspx

答案 2 :(得分:-1)

一定要有。

p.WaitForExit() 
在您读取输出的行之后的

方法。以下是MSDN的解释:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v=vs.110).aspx