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时,它正在运行。
答案 0 :(得分:3)
除非我遗漏了某些内容,否则(Environment.GetFolderPath(Environment.SpecialFolder.System)
将返回本地计算机(代码运行的位置)特殊文件夹。因此,期望文件C:\Windows\System\iisreset.exe
位于您的计算机上。我能看到解决此问题的唯一方法是删除C:\
,而是添加设备的名称\\DeviceName\C$\
,然后添加文件路径。这是假设特殊文件夹系统位于您的计算机和远程计算机上的相同位置。
获取远程机器系统目录的唯一方法是通过WMI或通过注册条目读取来获取它。
所以如果使用WMI:
"SELECT * FROM Win32_OperatingSystem"
完成后,您需要自己构建文件夹字符串。
答案 1 :(得分:2)
没有名为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";
答案 2 :(得分:0)
iisreset.exe支持远程调用,因此您可以实际执行以下操作,而不是使用WMI来获取远程目录:
iisreset {servername}