Windows Service 控制介面

ServiceController.aspx)這個類別可以用來控制Service的狀態
詳細的資訊請參考MSDN上面的文件.aspx)

新增一個Windows Form應用程式來當範例


首先要先參考System.ServiceProcess這個元件

簡單拉兩個按鈕來控制啟動或停止服務

在Button Click事件中,透過ServiceController來切換狀態
private void Btn_Start_Click(object sender, EventArgs e)
{
// 設定服務
using (ServiceController objSC = new ServiceController(“Service1”))
{
// 設定一個 Timeout 時間,若超過 30 秒啟動不成功就宣告失敗
TimeSpan timeout = TimeSpan.FromMilliseconds(1000 30);

// 啟動服務
objSC.Start();

// 設定該服務必須在timeout時間內切換到Running狀態
objSC.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
}

private void Btn_Stop_Click(object sender, EventArgs e)
{
// 設定服務
using (ServiceController objSC = new ServiceController(“Service1”))
{
// 若該服務不是「停用」的狀態,才將其停止運作,否則會引發 Exception
if (objSC.Status != ServiceControllerStatus.Stopped && objSC.Status != ServiceControllerStatus.StopPending)
{
// 設定一個 Timeout 時間,若超過30秒停止不成功就宣告失敗!
TimeSpan timeout = TimeSpan.FromMilliseconds(1000
30);

// 停止服務
objSC.Stop();

// 設定該服務必須在timeout時間內切換到Stopped狀態
objSC.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
}
}
}

再拉個按鈕來發送自訂命令

透過ExecuteCommand來發送命令,需要注意這裡面的CommandID必須在128~256這個範圍
private void Btn_CMD_128_Click(object sender, EventArgs e)
{
// 設定服務
using (ServiceController objSC = new ServiceController(“Service1”))
{
if (objSC.Status == ServiceControllerStatus.Running)
{
objSC.ExecuteCommand(128);
}
}
}

在Service中去覆寫OnCustomCommand,就可以收到發送命令的通知
至於收到什麼編號要去做什麼行為,簡單地用個switch case就行了
protected override void OnCustomCommand(int command)
{
switch (command)
{
case 128:
break;
case 129:
break;
case 130:
break;
default:
break;
}
}