我有Windows Server 2003(IIS 6.0)和Windows Server 2008(IIS 7.0)服务器,我使用MSBuild来部署Web应用程序。
我需要进行安全部署,并执行此操作:
停止IIS 6中的网站(或IIS 7中的应用程序),而不是停止AppPool。
检查网站是否已停止;没跑了。
如果网站已停止,请执行另一项部署任务。
启动网站IIS 6(或IIS 7中的应用程序),
我怎样才能做到这一点?
更新:对我而言:IIS6WebSite和IIS6AppPool(以及IIS7),在尝试停止网站或AppPool时是否等待停止状态?
当我执行网站停止操作(或AppPool的停止操作)时,我需要确保100%网站已停止,然后,只有在网站停止时,我才能执行其他目标。
答案 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
答案 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>