iisreset на удаленной машине (C#)

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 ответа

Решение

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

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

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

"SELECT * FROM Win32_OperatingSystem"

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

Там нет файла с именем 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";

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

iisreset {servername}
Другие вопросы по тегам