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}