1

我需要从 C#/.NET 应用程序重新启动 IIS。这似乎是一个微不足道的问题,但到目前为止我还没有成功,而且这个问题的答案都没有奏效。

我是机器上的本地管理员。

我试过这个:

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 提示,我无法拥有该提示,因为该应用程序将在没有用户干预的情况下运行。

还有什么我可以尝试的吗?

4

5 回答 5

4

在解决方案资源管理器中右键单击项目名称 -> 添加 -> 新建项目 -> 应用程序清单文件。

在其中编辑

    <requestedPrivileges>
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    </requestedPrivileges>

这应该可以解决您的问题。

于 2016-05-12T06:36:35.087 回答
2

文件名错误。尝试FileName = @"iisreset.exe"

于 2014-12-23T16:44:35.193 回答
2

或者(更清洁)您可以只使用ServiceController该类随后停止和启动 iis 服务。
不过,您可能仍需要提升权限……模仿可能会解决这个问题;“模拟具有更高权限的帐户。 ”用于重新启动服务。

可以在此处找到如何启动/停止(和重新启动)Windows 服务的一个很好的示例: 启动、停止和重新启动 Windows 服务 (C#)

于 2013-09-30T21:04:46.233 回答
1

您遇到的异常很可能是由于您尝试运行此应用程序的用户没有管理权限。

如果您以管理员帐户运行您的应用程序,那么它应该会自动以管理权限启动 iisreset,而不会出现 UAC 提示或错误。

你应该如何以管理员身份运行你的进程是一个单独的问题。最常见的方法是创建应用程序清单:

http://msdn.microsoft.com/en-us/library/ms235229.aspx

于 2013-09-30T21:03:59.473 回答
0

启动 IIS 的另一个选项:

string serviceName = "W3SVC"; //W3SVC refers to IIS service
ServiceController service = new ServiceController(serviceName);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running);// Wait till the service started and is running
于 2016-10-05T07:24:09.323 回答