2010年7月6日 星期二

C#服務重新啟動

在 window 有 很多 Service, 我們可以在 控制台->系統管理工具->服務 中 來設定他的狀態。

若想要從程式端來設定服務, C# 也有提供這種功能

舉例來說 MSDN 上的 smaple code 就是 開啟 Alerter 這個服務



// Check whether the Alerter service is started.

ServiceController sc = new ServiceController();
sc.ServiceName = "Alerter";
Console.WriteLine("The Alerter service status is currently set to {0}",
sc.Status.ToString());

if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.

Console.WriteLine("Starting the Alerter service...");
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);

// Display the current service status.
Console.WriteLine("The Alerter service status is now set to {0}.",
sc.Status.ToString());
}
catch (InvalidOperationException)
{
Console.WriteLine("Could not start the Alerter service.");
}
}



參考網址 MSDN- Service Start
參考網址 MSDN- Service controler 類別



下面補充 重新啟動 service 的 sample

http://www.csharp-examples.net/restart-windows-service/


雖然這裡範例是有將 stop service 和 start service 放在同一個 function 執行
但 在我撰寫的平台中 會 無法正常 達到重新啟動的效果, 原因是 將 service stop 後 放入 StopPending 但還沒 真正 stop ,
若強行 使用WaitForStatus 到真正結束 會出現 timeout 的 例外
但接者呼叫 start service 會出現 InvalidOperationException 的例外


所以 我使用的方法是將 stop service 和 start service 分別在不同函式呼叫避免掉這個問題

沒有留言: