Подтвердить что ты не робот

Как я могу программно остановить или запустить веб-сайт в IIS (6.0 и 7.0) с помощью MsBuild?

У меня есть серверы Windows Server 2003 (IIS 6.0) и Windows Server 2008 (IIS 7.0), и я использую MSBuild для развертывания веб-приложений.

Мне нужно сделать безопасное развертывание и сделать следующее:

  • Остановить веб-сайт в IIS 6 (или приложении в IIS 7), а не останавливать AppPool.

  • Проверьте, остановлен ли сайт; не работает.

  • Если веб-сайт остановлен, выполните другую задачу для развертывания.

  • Запустите веб-сайт IIS 6 (или приложение в IIS 7),

Как я могу это достичь?

Обновление: ключ для меня: IIS6WebSite и IIS6AppPool (и для IIS7), подождите ли остановленный статус при попытке остановить сайт или AppPool?

Когда я выполняю действие "Остановить действие для сайта" (или "Остановить действие для AppPool" ), мне нужно убедиться, что на 100% остановлен веб-сайт, а затем, и только если сайт остановлен, я могу выполнить другие цели.

4b9b3361

Ответ 1

Добавив ссылку на 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!");
            }
        }
    }
}

Очевидно, адаптируйте это к своим собственным требованиям и через свою конструкцию развертывания script выполните результирующее приложение.

Enjoy.:)

Ответ 2

  • Напишите script, например. PowerShell, который остановит/запустит веб-сайт IIS, программно опираясь на аргумент командной строки, например. start-stop.ps1 /stop 1

  • Поместите его в MsBuild script в качестве настраиваемого шага


Отметьте этот, чтобы узнать, как перезапустить IIS AppPool

Ссылка на объекты WMI IIS

Ответ 3

Итак, у вас есть свой ответ выше для 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()