Я пытаюсь создать небольшую программу для запуска на централизованном устройстве. Эта программа будет работать
"psexec \ сервер(ы) netstat -na | findstr "ПРОСЛУШИВАНИЕ""
для сбора данных netstat с удаленных узлов (следует перенаправить вывод в строку), затем проанализировать данные и сравнить их с известным списком. Я могу запустить psexec
cmd выше без каких-либо проблем из строки 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
соответствует помощь. - person Conspicuous Compiler   schedule 21.12.2011