如何使用MsBuild以编程方式在IIS(6.0和7.0)中停止或启动网站?

Kiq*_*net 33 c# msbuild iis-7 iis-6 web-deployment

我有Windows Server 2003(IIS 6.0)和Windows Server 2008(IIS 7.0)服务器,我使用MSBuild来部署Web应用程序.

我需要进行安全部署,并执行此操作:

  1. 停止IIS 6中的网站(或IIS 7中的应用程序),而不是停止AppPool.

  2. 检查网站是否停止; 没跑

  3. 如果网站已停止,请执行另一项部署任务.

  4. 启动IIS 6(或IIS 7中的应用程序)网站,

我怎样才能做到这一点?

更新:对我来说:IIS6WebSite和IIS6AppPool(以及IIS7),在尝试停止网站或AppPool时是否等待停止状态?

当我执行网站停止操作(或AppPool的停止操作)时,我需要确保100%网站已停止,然后,只有网站停止时,我才能执行其他目标.

Gra*_*mas 46

通过添加引用Microsoft.Web.Administration(可以在X:\Windows\System32\inetsrv或等效的系统中找到),您可以使用IIS7实现对情境的良好管理控制,如下所示:

namespace StackOverflow
{
    using System;
    using System.Linq;
    using Microsoft.Web.Administration;

    class Program
    {
        static void Main(string[] args)
        {
            var server = new ServerManager();
            var site = server.Sites.FirstOrDefault(s => s.Name == "Default Web Site");
            if (site != null)
            {
                //stop the site...
                site.Stop();
                if (site.State == ObjectState.Stopped)
                {
                    //do deployment tasks...
                }
                else
                {
                    throw new InvalidOperationException("Could not stop website!");
                }
                //restart the site...
                site.Start();
            }
            else
            {
                throw new InvalidOperationException("Could not find website!");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,根据您自己的要求定制它,并通过您的部署构建脚本执行生成的应用程序.

请享用.:)

  • 注意``Microsoft.Web.Administration`也可以在`NuGet`上找到 (5认同)
  • 不,这只适用于IIS7.您将需要一种不同的IIS6方法,例如使用`WMI`或`DirectoryServices`. (2认同)

aba*_*hev 2

  • 编写一个脚本,例如 PowerShell,它将根据命令行参数以编程方式停止/启动 IIS 网站,例如start-stop.ps1 /stop 1

  • 将其作为自定义步骤放入 MsBuild 脚本中


检查此内容以了解如何重新启动 IIS AppPool

IIS WMI 对象参考