以编程方式重新启动 IIS

本文关键字:IIS 重新启动 方式 编程 | 更新日期: 2023-09-27 18:33:32

我需要从 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 提示,我不能有,因为这个应用程序将在没有用户干预的情况下运行。

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

以编程方式重新启动 IIS

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

在其中编辑

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

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

或者

(和更干净),您可以使用ServiceController类随后停止和启动 IIS 服务。
不过,您可能仍然需要提升的权限...模拟可能会解决这个问题; "模拟具有更高权限的帐户",以重新启动服务。

有关如何启动/停止(和重新启动)Windows 服务的一个很好的例子可以在这里找到:启动、停止和重新启动 Windows Service (C#)

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

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

如果以管理员帐户身份运行应用程序,则它应以管理权限自动启动 iisset,而不会出现 UAC 提示或错误。

作为管理员,您应该如何运行您的流程是一个单独的问题。 最常见的方法是创建应用程序清单:

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

启动 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