38

我有 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% 的网站停止,然后,只有当网站停止时,我才能执行其他目标。

4

3 回答 3

55

通过添加对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!");
            }
        }
    }
}

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

享受。:)

于 2011-02-10T15:47:14.463 回答
2
  • 编写一个脚本,例如 PowerShell,它将依靠命令行参数以编程方式停止/启动 IIS 网站,例如start-stop.ps1 /stop 1

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


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

IIS WMI 对象参考

于 2011-02-10T15:16:31.643 回答
0

因此,您在上面对 IIS7 有了答案。您缺少的是 IIS6。所以给你。这是使用 COM 互操作对象,因为这就是 IIS 6 可用的全部内容。此外,因为它在 vb 中,所以您必须弄清楚如何转换它。http://www.codeproject.com/Articles/16686/AC-alternative-for-the-Visual-Basic-GetObject-fun应该让你走上正轨。您也可以仅为此代码创建一个 vb 项目,但这有点愚蠢。

Dim WebServiceObj As Object
dim IisSiteId as Integer = 0
WebServiceObj = GetObject("IIS://localhost/W3SVC/" & IisSiteId)
WebServiceObj.Stop()
WebServiceObj.Start()
于 2016-05-12T23:23:44.173 回答