2011-02-10 47 views
29

我有Windows Server 2003(IIS 6.0)和Windows Server 2008(IIS 7.0)服务器,我使用MSBuild部署Web应用程序。如何使用MsBuild以编程方式停止或启动IIS(6.0和7.0)中的网站?

我需要做一个安全的部署,并做到这一点:

  1. 停止IIS 6网站(或在IIS 7的应用程序),不会停止的应用程序池。

  2. 检查网站是否停止;没有运行。

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

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

我怎样才能做到这一点?

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

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

+0

我相信你要找的东西就像[MSBuild Extension Pack](http://msbuildextensionpack.codeplex.com/)。它提供了启动/停止IIS网站的任务(对于II6,请参见[Iis6WebSite](http://www.msbuildextensionpack.com/help/4.0.2)。0/HTML/2849df01-25a8-6f99-5a0c-0fa7a6df5084.htm))。 – 2011-02-10 15:34:42

+0

+1虽然这里的一切都“有效”,但如果您只是使用MSBuild,这是最好的方法。为什么重新发明轮子? – 2011-02-10 16:17:37

+0

对我来说键:Iis6WebSite和IIs6AppPool(和IIS7),请尝试停止WebSite或AppPool时等待停止状态? – Kiquenet 2011-02-11 10:27:26

回答

1
  • Write a script,例如, PowerShell,它将通过编程方式依靠命令行参数停止/启动IIS网站,例如start-stop.ps1 /stop 1

  • 把它放进的MSBuild脚本作为一个自定义步骤


检查this,了解如何重新启动IIS应用程序池

IIS WMI objects reference

37

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

显然这量身定制自己的要求,并通过部署构建脚本执行结果的应用。

享受。 :)

0

所以你有你的答案上面的IIS7。你缺少的是IIS6。所以,你走了。这是使用COM互操作对象,因为这是IIS 6的所有功能。另外,因为它在vb中,所以您必须弄清楚如何转换它。 http://www.codeproject.com/Articles/16686/A-C-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() 
相关问题