3

似乎涉及的不仅仅是迭代 ApplicationPools 并在它们上调用 Recycle()。我如何以编程方式(来自.Net)最接近地模仿 IISReset 而无需诉诸 shell 调用?

我想最重要的是:IISReset 所做的事情是否无法通过 Microsoft.Web.Administration 命名空间中可用的工具来完成?

4

1 回答 1

1

您可以通过启动或停止以下服务来使用 System.ServiceProcess.ServiceController (从这个答案中得到了想法):

-Windows 进程激活服务 (WAS)
-万维网发布服务 (W3SVC)

这是一些可以完成这项工作的代码:

//stop iis (like running "IISReset /Stop")
ResetService("WAS", false);
ResetService("W3SVC", false);

//start iis (like running "IISReset /Start")
ResetService("WAS", true);
ResetService("W3SVC", true);

private static void ResetService(string name, bool start)
{
    using (var service = new System.ServiceProcess.ServiceController(name))
    {
        if (start && service.Status == ServiceControllerStatus.Stopped)
        {
            service.Start();
        }
        else if (!start && service.Status == ServiceControllerStatus.Running)
        {
            service.Stop();
        }
    }
 }

至于其他 IISReset 命令,您可以很容易地在超时中编写代码。要重新启动计算机,请查看此答案。如果您需要更多详细信息,请告诉我。

但是,如果这对你来说还不够,你总是可以在 c# 中执行 power shell 脚本,使用这种技术(漂亮的球员,如果你只需要完成)。

于 2014-03-07T16:59:59.590 回答