2011-02-10 161 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() 
相關問題