【发布时间】:2013-09-30 20:51:30
【问题描述】:
我需要从 C#/.NET 应用程序重新启动 IIS。这似乎是一个微不足道的问题,但到目前为止我还没有成功,this question 的答案都没有奏效。
我是机器上的本地管理员。
我试过这个:
var process = new Process
{
StartInfo =
{
Verb = "runas",
WorkingDirectory = @"C:\Windows\System32\",
FileName = @"issreset.exe"
}
};
process.Start();
但这会引发Win32Exception - cannot find the file specified.,我也尝试了各种组合,将整个路径放入FileName,并使用UseShellExecute,但这些选项都没有帮助。
我也试过通过命令行调用它:
var process = new Process
{
StartInfo =
{
Verb = "runas",
WindowStyle = ProcessWindowStyle.Hidden,
FileName = @"cmd.exe",
Arguments = "/C iisreset"
}
};
process.Start();
这可行,但它提供了一个 UAC 提示,我无法拥有该提示,因为此应用程序将在没有用户干预的情况下运行。
还有什么我可以尝试的吗?
【问题讨论】:
-
我想你想要
iisreset.exe,而不是iisreset。您需要文件扩展名。 -
你是对的。这是我在写这个问题时的一个错字。我试过了。
-
如果您将
UseShellExecute设置为true,第一个将起作用。否则,FileName必须是完整路径。没有办法绕过 UAC,这有点意思。你可以在那台机器上关闭它。 -
您的第一个 sn-p 代码对我来说很好用。您确定这是您尝试过的代码吗?您确定 IIS 已安装且文件存在吗?
-
这不会绕过 UAC,但它只会提示输入密码:
runas /user:Administrator iisreset作为第二个进程的参数。