以编程方式重新启动IIS

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

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

您获得的exception很可能是由于您尝试运行此应用程序的用户没有管理权限。

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

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

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

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

或者(并且更干净)您可以使用ServiceController类随后停止并启动iis服务。
你可能仍然需要提升权限……假冒可能会解决这个问题; “ 模拟具有更高权限的帐户。 ”用于重新启动服务。

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

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

在它编辑

     

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

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