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}