menu

秋梦无痕

一场秋雨无梦痕,春夜清风冻煞人。冬来冷水寒似铁,夏至京北蟑满城。

Avatar

检查IIS状态

写了一个通过访问网页检查IIS的状态的小玩意,这个东西可以改造成一个服务器端任务。这个方法还很偷懒了,回头找找IIS的接口,看看有什么更合适的方法。

using System.Diagnostics;
using System.Net;

namespace ifyr.IISController {
class IISController {
static void Main(string[] args) {
if (!CheckUrl("http://localhost/checkState.aspx")) {
Process.Start("IISReset.exe");
}
}

static bool CheckUrl(string url) {
HttpWebRequest request = null;
HttpWebResponse response = null;
try {
request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
response = (HttpWebResponse)request.GetResponse();
return (response.StatusCode == HttpStatusCode.OK);
} catch {
return false;
} finally {
if (response != null) {
response.Close();
}
}
}
}
}

蒋晟@blogcn上看到重新启动服务的方法,即

如果用程序来重新启动IIS的话,可以使用IShellDispatch2::ServiceStart方法。Shell对象的CLSID是CLSID_SHELL,支持IShellDispatch/IShellDispatch2等接口。这两种方法都可以应用于其它服务。


但是如果不是新开进程,IIS重起的时候也会重新启动CLR,这样会不会把重起IIS的进程关闭掉呢?大概这时候IIS已经在执行重起操作,关闭发送重起消息的进程就没有任何影响了吧。

评论已关闭