如何使用MsBuild以编程方式在IIS(6.0和7.0)中停止或启动网站?

时间:2011-02-10 15:10:54

标签: c# iis-7 msbuild iis-6 web-deployment

我有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中的应用程序),

  5. 我怎样才能做到这一点?

    更新:对我而言:IIS6WebSite和IIS6AppPool(以及IIS7),在尝试停止网站或AppPool时是否等待停止状态?

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

3 个答案:

答案 0 :(得分:43)

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

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

享受。 :)

答案 1 :(得分:2)

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

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


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

IIS WMI objects reference

答案 2 :(得分:0)

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

<!DOCTYPE html>
<html lang="en-us">

<head>
    <meta charset="utf-8">
    <title>js</title>
    <style type="text/css">
        .green{
          color:green;
        }
        .red{
          color:red;
        }
    </style>
</head>
<body>
    <input type="text" id="input"></input>
    <div id="result"></div>
    <script> 
        var doc = document;
        var word = 'AABBCC';
        var input = doc.getElementById('input');
        var result = doc.getElementById('result');
        var inputArray = [];
        var colorArray = [];

        input.addEventListener("keyup", function() {
            //clear result div and capture the string in the textbox
            var inputValue = input.value.toUpperCase();
            result.innerHTML = '';

            //wrap each character of the string in a <span>
            for (var i = 0; i < inputValue.length; i++) {
                var newSpan = document.createElement('span');
                var t = document.createTextNode(inputValue.charAt(i));
                newSpan.appendChild(t);
                result.appendChild(newSpan);

                //capture each letter in an array
                inputArray[i] = inputValue.charAt(i);
            }

            //get position of last character
            var position = inputValue.length - 1;
            var thisChar = inputValue.charAt(position);
            var wordChar = word.charAt(position);            
            console.log('this char is ' + thisChar + ' and index is ' + position + ' and inputArray is ' + inputArray);

            var green = (thisChar === wordChar);
            var red = remains(thisChar,position);          

            if(green){
                colorArray[position] = 'green';
            } else if (red){
                colorArray[position] = 'red';
            } else {
                colorArray[position] = '';
            }
            color();
        });    

        function color(i, color){
            var children = result.childNodes;
            for (var i = 0; i < children.length; i++) {
                children[i].className = colorArray[i];
            }
        }

        function remains(char,n){
            var found = false;
            //get the remaining substring of word to compare to
            var subString = word.substring(n);
            //if character is found return true
            for (var i = 0; i < subString.length; i++) {
                if(char === subString.charAt(i)){
                    found = true;
                }
            }
            return found;
        }
    </script>

</body>
</html>