psexec.exe не работает, когда я создаю процесс из C # - PullRequest
0 голосов
/ 09 ноября 2011

Короче говоря ...

Это не работает:

Process p = new Process();
p.StartInfo.FileName = @"External\PsExec.exe";
string file = String.Concat(Path.Combine(Environment.CurrentDirectory,"temp"),@"\iisreset",DateTime.Now.ToString("ddMMyyyy-hhmmssss"),".txt");
p.StartInfo.Arguments = String.Format("-s -u {0}\\{1} -p {2} \\\\{3} iisreset > \"{4}\"", Domain,UserName, Password, machineIP, file);
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();

Я получаю сообщение RPC Unavailable.

Но когда я получаю доступ к командной строкев папке программы, затем я запускаю это: (с правильными параметрами), точно так же, как я указал в имени файла / аргументах ...

External\PsExec.exe -s -u [user] -p [password] \\[ip] iisreset > "[path]"

Это работает!Должен ли я указать что-то еще в процессе C #?Что может случиться?

Заранее спасибо!

EDIT : Это работает, если я поставлю cmd в качестве FileName и /c PsExec.exe перед аргументами.Проблема в том, что он всегда показывает окно.

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Нельзя перенаправить стандартный вывод, используя аргументы, как вы делаете. На самом деле все не так.

В командной строке ваши аргументы заканчиваются, когда интерпретатор команд видит>, и он начинает процесс перенаправления стандартного вывода на имя файла.

Для этого в C # вам необходимо использовать свойство RedirectStandardOutput класса StartInfo, затем прочитать из потока Process.StandardOutput и записать в файл.

Документация MSDN для RedirectStandardOutput содержит краткий пример, который можно использовать для начала работы.

0 голосов
/ 12 октября 2013
iisreset [machinename] -

вам не нужен psexec

...