3
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 时,它正在工作。

4

3 回答 3

4

除非我遗漏了什么,(Environment.GetFolderPath(Environment.SpecialFolder.System)否则将取回本地机器(代码运行的地方)特殊文件夹。所以它期望文件C:\Windows\System\iisreset.exe位于您的机器上。我可以看到解决此问题的唯一方法是删除C:\并添加设备名称\\DeviceName\C$\,然后添加文件路径。这是假设特殊文件夹系统位于您的机器和远程机器上的同一位置。

获取远程机器系统目录的唯一其他方法是通过 WMI 或通过读取 reg 条目来获取它。

因此,如果使用 WMI:

"SELECT * FROM Win32_OperatingSystem"

完成后,您需要自己从中构建文件夹字符串。

于 2011-08-09T08:39:03.513 回答
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";
于 2011-07-14T06:50:58.237 回答
0

iisreset.exe 支持远程调用,因此您实际上可以执行以下操作,而不是使用 WMI 来获取远程目录:

iisreset {servername}
于 2013-10-07T22:33:10.700 回答