iisreset на удаленной машине (C #) - PullRequest
2 голосов
/ 13 июля 2011
Process myProcess = new Process();
ProcessStartInfo remoteAdmin =
            new ProcessStartInfo(Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\iisreset.exe /restart");

remoteAdmin.UserName = username;
remoteAdmin.Password = pwd;
remoteAdmin.Domain = domain;
myProcess.StartInfo = remoteAdmin;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardOutput = true;

myProcess.Start();   --- ERROR HERE

Не удается найти указанный файл.

Но когда я пытаюсь запустить iisreset на локальной машине с помощью cmd, он работает.

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Если я что-то упустил, (Environment.GetFolderPath(Environment.SpecialFolder.System) вернет специальную папку на локальный компьютер (где работает код). Поэтому он ожидает, что файл C:\Windows\System\iisreset.exe будет расположен на вашем компьютере. Единственный способ обойти это - сбросить C:\, вместо этого добавить имя устройства \\DeviceName\C$\ и затем путь к файлу. Это при условии, что система специальных папок находится в одном и том же месте на вашем компьютере и на удаленном компьютере.

Единственный другой способ получить системный каталог удаленных машин - это получить его через WMI или через запись reg.

Итак, если вы используете WMI:

"SELECT * FROM Win32_OperatingSystem"

После того, как вы это сделаете, вам нужно будет самостоятельно построить строку папки из этого.

2 голосов
/ 14 июля 2011

Нет файла с именем C:\Windows\System\iisreset.exe /restart (при условии, что Environment.GetFolderPath(Environment.SpecialFolder.System) возвращает C:\Windows\System\

Так что вы бы хотели

ProcessStartInfo remoteAdmin = 
     new ProcessStartInfo(Environment.GetFolderPath(Environment.SpecialFolder.System) + "iisreset.exe");
remoteAdmin.Arguments = "/restart";

Но Environment.GetFolderPath(Environment.SpecialFolder.System), вероятно, возвращает что-то вроде C:\Windows\System (обратите внимание, нет косой черты), и определенно нет файла с именем c:\windows\systemiisreset.exe

Так что вы бы на самом деле хотели

ProcessStartInfo remoteAdmin = 
    new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "iisreset.exe"));
remoteAdmin.Arguments = "/restart";
0 голосов
/ 08 октября 2013

iisreset.exe поддерживает удаленные вызовы, поэтому вместо того, чтобы использовать WMI для получения удаленного каталога, вы можете просто сделать:

iisreset {servername}
...