web-dev-qa-db-ja.com

MsBuildを使用して、IIS(6.0および7.0))でプログラムによってWebサイトを停止または開始するにはどうすればよいですか?

Windows Server 2003(IIS 6.0)サーバーとWindows Server 2008(IIS 7.0)サーバーがあり、MSBuildを使用してWebアプリケーションを展開しています。

安全な展開を行う必要があり、これを実行します。

  1. IIS 6(またはIIS 7)のアプリケーション)でWebサイトを停止します。AppPoolは停止しません。

  2. ウェブサイトが停止していないか確認してください。走っていない。

  3. Webサイトが停止している場合は、デプロイのために別のタスクを実行します。

  4. ウェブサイトを開始IIS 6(またはアプリケーションIIS 7))、

どうすればこれを達成できますか?

更新:私にとってのキー:IIS6WebSiteとIIS6AppPool(およびIIS7の場合)、Stop WebsiteまたはAppPoolを試すときに停止ステータスを待ちますか?

Webサイトの停止アクション(またはAppPoolの停止アクション)を実行する場合、100%Webサイトが停止していることを確認する必要があります。その後、Webサイトが停止している場合にのみ、他のターゲットを実行できます。

33
Kiquenet

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!");
            }
        }
    }
}

明らかにこれを独自の要件に合わせて調整し、デプロイメントビルドスクリプトを介して、結果のアプリケーションを実行します。

楽しい。 :)

45
Grant Thomas
  • スクリプトを書く 、例えばPowerShell、これは停止/開始しますIISプログラムでコマンドライン引数に依存するWebサイト、たとえばstart-stop.ps1 /stop 1

  • カスタムステップとしてMsBuildスクリプトに入れます


再起動する方法については、 this を確認してくださいIIS AppPool

IIS WMIオブジェクト参照

2
abatishchev

したがって、IIS7に対する上記の答えがあります。不足しているのはIIS6です。だからここに行きます。 IIS 6で使用できるのはCOM相互運用オブジェクトのみです。また、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()
0
Richard Barker