最近在做一個大型項目的時候,需要window服務來做掃表倒表,但是又最好能夠隨時遠程登入後控制,並且可以傳遞一些參數進去讓windows服務與外界有些互動,並得到控制,於是,自己研究了一番,現在,把一些體會拿來跟大家一起體會。
在C# 中使用一個System.ServiceProcess 命名空間下的ServiceControl 來對windows服務進行控制,其實在底層是SCM(service control manager)。
咱們開始來一步一步操作。
第一步 :添加一個引用,System.ServiceProcess
第二步:從vs2005的伺服器總管來拖動一個服務樣本到設計介面。
第三步:編寫控制服務的代碼
當把一個服務拖動到設計介面的時候,就建立了一個基於某個服務的服務控制組件執行個體,ServiceControl1,
此執行個體有許多方法可以控制服務的狀態,以及執行自訂命令,執行自訂命令要注意的一點就是命令只能傳遞一個int類型的參數,而且這個參數有限制大於128,小於256,就是這個限制條件害得我鬱悶了好久,我一直傳遞的1,2,3之類的參數,老是說報錯。。。。最後在google中的程式碼搜尋中找到了答案。
當然在windows服務裡面你需要重寫一個方法,樣本如下:
protected override void OnCustomCommand(int command)
{
if (command == 100)
{
StreamWriter sw = new StreamWriter(@"C:\xx.txt", true);
sw.WriteLine("command is "+command+" " + DateTime.Now.ToString());
sw.Close();
}
else if (command == 200)
{
StreamWriter sw = new StreamWriter(@"C:\xx.txt", true);
sw.WriteLine("command is "+command +" "+ DateTime.Now.ToString());
sw.Close();
}
}
代碼的其他部分就沒有什麼好說的了,點擊這裡<a target=blank src='http://files.cnblogs.com/FrameWork/WindowsApplication1.rar'>下載範例程式碼</a>