我試圖創建一個小程序在集中式設備上運行。該程序將運行C#和psexec進程輸出重定向問題
「PSEXEC \服務器(S)的netstat -na | FINDSTR 」聽「」
從遠程節點採集數據的netstat(應該重定向輸出字符串),然後解析數據並與已知列表進行比較。我可以運行上面的cmdd psexec
,而cmd行沒有任何問題,但是當我嘗試在我的C#程序中運行與該進程相同的命令時,沒有數據返回被解析。我可以看到netstat
正在運行(cmd窗口與netstat結果一起閃爍),但process.standardoutput未捕獲該流。如果我使用ping或幾乎任何非psexec
作爲參數,流將被捕獲,結果顯示在我的文本框中。我也嘗試將文件名設置爲psexec.exe並指定參數,但我得到了相同的結果。最後但並非最不重要的是,如果我運行沒有任何參數的psexec,我會在我的文本框中返回返回的幫助信息。如果我運行psexec.exe
作爲文件名,或者運行cmd.exe
作爲文件名,「/ c psexec」指定爲args
,則這是真實的。
我只是想在此時執行本地執行時捕獲psexec輸出。稍後我會擔心psexec到遠程機器。任何幫助將非常感激。
下面的代碼:
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName = "cmd.exe";
pProcess.StartInfo.Arguments = "/c psexec netstat";
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.Start();
string strOutput = pProcess.StandardOutput.ReadToEnd();
pProcess.WaitForExit();
if (pProcess.HasExited)
{
textBox1.Text = strOutput;
}
else
{
textBox1.Text = "TIMEOUT FAIL";
}
你可能會[找到'BeginOutputReadLine'示例代碼爲您提供幫助(http://msdn.microsoft.com/en-us/library/system.diagnostics .process.beginoutputreadline.aspx)。 – 2011-12-20 23:53:27