The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過 C# 啟動、停止、重新啟動 Windows 服務

由於最近都在研究 Setup Project,所以在安裝解除安裝 Windows 服務程式時都會需要透過自訂動作操作 Windows 服務的啟動或停止,今天我就來分享幾個透過 C# 對 Windows 服務啟動、停止、重新啟動的方法。

首先,你要先先知道「服務名稱」與「顯示名稱」是不一樣的,而「服務名稱」才是程式要用的部分:

「服務名稱」與「顯示名稱」是不一樣的

Microsoft Visual Studio 2008 - Windows Service Properties

啟動 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 服務而已!

相關連結