簡體   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