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