2012-01-30 3 views
3

Похоже, что есть более активное участие, чем просто повторение ApplicationPools и вызов Recycle() на них. Как я наиболее точно имитирую IISReset программно (из .Net), не прибегая к вызову оболочки?Что такое эквивалент IISReset, если я хочу использовать Microsoft.Web.Administration

И я полагаю, что самое главное: Есть ли вещи, которые IISReset делает, которые невозможно выполнить с помощью инструментов, доступных в пространстве имен Microsoft.Web.Administration?

ответ

1

Вы можете использовать System.ServiceProcess.ServiceController (получил идею от этого answer), путем запуска или остановки следующие услуги:

-windows службы активации (WAS)
-Мировой Wide Web Publishing Service (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, можно закодировать в тайм-аут достаточно легко. И чтобы перезагрузить компьютер, проверьте this answer. Дайте мне знать, если вам нужны подробности.

Но если этого недостаточно для вас, вы всегда можете выполнить сценарии командной оболочки в C#, используя this technique (симпатичный балерин, если вам просто нужно выполнить «er done»).

Смежные вопросы