ApplicationPools を反復して Recycle() を呼び出すだけでなく、さらに多くの作業が必要になるようです。シェル呼び出しに頼らずに (.Net から) プログラムで IISReset を最も厳密に模倣するにはどうすればよいですか?
そして、最も重要なことは、IISReset が行うことで、Microsoft.Web.Administration 名前空間で利用できるツールでは実現できないことはありますか?
次のサービスを開始または停止することにより、System.ServiceProcess.ServiceController (この回答からアイデアを得ました) を使用できます。
-Windows プロセス アクティベーション サービス (WAS)
-World Wide Web 発行サービス (W3SVC)
ここに仕事をするいくつかのコードがあります:
//stop iis (like running "IISReset /Stop")
ResetService("WAS", false);
ResetService("W3SVC", false);
//start iis (like running "IISReset /Start")
ResetService("WAS", true);
ResetService("W3SVC", true);
private static void ResetService(string name, bool start)
{
using (var service = new System.ServiceProcess.ServiceController(name))
{
if (start && service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
}
else if (!start && service.Status == ServiceControllerStatus.Running)
{
service.Stop();
}
}
}
他の IISReset コマンドについては、タイムアウトを簡単にコーディングできます。また、コンピューターを再起動するには、この回答を確認してください。詳細が必要な場合はお知らせください。
しかし、それだけでは不十分な場合は、この手法を使用して、いつでも c# で Power Shell スクリプトを実行できます (ただやり遂げる必要がある場合は、非常にうまくいきます)。