以编程方式重新启动IIS

时间:2013-09-30 20:51:30

标签: c# .net iis process uac

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

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

5 个答案:

答案 0 :(得分:2)

FileName错误。试试FileName = @"iisreset.exe"

答案 1 :(得分:2)

在解决方案资源管理器中右键单击项目名称 - >添加 - >新项目 - > Appliaction Manifest File。

在其中编辑

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

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

答案 2 :(得分:1)

您获得的异常很可能是由于您尝试运行此应用程序的用户没有管理权限这一事实。

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

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

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

答案 3 :(得分:1)

或者(更清洁)您可以使用ServiceController类随后停止并启动iis服务。
你可能仍然需要提升权限......假冒可能会解决这个问题; “impersonate an account with higher privileges.”用于重新启动服务。

可以在此处找到如何启动/停止(并重新启动)Windows服务的一个很好的示例: Start, Stop and Restart Windows Service (C#)

答案 4 :(得分: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