由於最近都在研究 Setup Project,所以在安裝與解除安裝 Windows 服務程式時都會需要透過自訂動作操作 Windows 服務的啟動或停止,今天我就來分享幾個透過 C# 對 Windows 服務啟動、停止、重新啟動的方法。
首先,你要先先知道「服務名稱」與「顯示名稱」是不一樣的,而「服務名稱」才是程式要用的部分:
啟動 Windows 服務
try
{
// 已知的 Service Name
string m_ServiceName = "Service1";
// 建立 ServiceController 物件實體
ServiceController service = new ServiceController(m_ServiceName);
// 設定一個 Timeout 時間,若超過 30 秒啟動不成功就宣告失敗!
TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 30);
// 啟動服務
service.Start();
// 設定該服務必須在等待 timeout 時間內將狀態改變至「已啟動(Running)」的狀態
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch
{
System.Windows.Forms.MessageBox.Show("服務無法啟動,請檢查相關設定!");
}
停止 Windows 服務
try
{
string m_ServiceName = "Service1";
ServiceController service = new ServiceController(m_ServiceName);
// 設定一個 Timeout 時間,若超過 60 秒啟動不成功就宣告失敗!
TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 60);
// 若該服務不是「停用」的狀態,才將其停止運作,否則會引發 Exception
if (service.Status != ServiceControllerStatus.Stopped &&
service.Status != ServiceControllerStatus.StopPending)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
}
}
catch (Exception ex)
{
// 如果無法停用服務會引發 Exception,也會讓反安裝自動中斷
throw new InstallException("服務無法停用,建議您可以先利用「工作管理員」將 Service1.exe 程序結束,再進行解除安裝。");
}
重新啟動 Windows 服務
這就沒什麼特別好講的了,先停用 Windows 服務再啟動 Windows 服務而已!
相關連結