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
找不到指定的文件。
但是当我尝试通过cmd在本地机器上运行iisreset时,它正在工作。
除非我遗漏了什么, (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}