1. 程式人生 > >cb 服務程式開發

cb 服務程式開發

好久沒有寫東西了,實在是太懶惰了,前一陣寫了一個服務程式,覺得挺簡單的,但是某日一位小弟卻來求救,聲稱服務程式很靈異,為此研究了一下,果然有點意思:

一、服務程式的建立:

其實服務程式的開發很簡單,只要選擇選單File-->New-->Other--->Service Application即可建立一個服務程式,工程建立後將自動生成一個service模組。這樣一個服務程式就已經生成了,修改工程名稱為myservice.exe,將service的DisplayName修改為:我的service,Name修改為MyService。

顧名思義:這裡分別設定了程式名稱,服務的顯示名稱和服務名。

這些工作做完,服務就可以編譯運行了。

二、執行的方法:

在cmd模式,進入程式所在路徑下執行以下命令:

安裝服務:myservice.exe /install 回車  ——這裡用程式檔名

啟動服務:net start myservice 回車     ——這裡用service的Name

停止服務:net stop myservice 回車      ——這裡用service的Name

解除安裝服務:myservice.exe /uninstall 回車  ——這裡用程式檔名

三、在服務啟動時現實一個視窗:

怎麼樣是不是很簡單,不過要想在程式啟動時顯示一個提示,就變得很有意思了,因為SvcMgr和Forms單元中都有Application定義,因此在服務程式中使用窗體有一些限制。

首先,你可能會想到MessageBox,不幸的是SvcMgr::Application中沒有MessageBox方法;

其次,嘗試使用ShowMessage,結果服務能正確安裝,但是一直在啟動,停止、暫停、重起狀態沒有載入上,更悲劇的是服務狀態顯示是啟動,但是實際沒啟動,又不能關閉,又不能解除安裝,最後忍無可忍用命令:sc delete myservice才把它搞掉。

最後,沒辦法只好新建了一個Form來顯示提示資訊,在service的onstart事件中寫入以下程式碼:

  TForm2 * nf = new TForm2(Application);
  nf->Label1->Caption = "啟動成功!";
  nf->Show();
  Started = true;
  ReportStatus();
  LogMessage(DateTimeToStr(Now())+" 服務啟動",EVENTLOG_INFORMATION_TYPE,0,0);

安裝執行服務正常,可是視窗沒彈出來。

注意:這裡需要做一下設定,將service的interactive屬性設為true即可以看到視窗了。

自己動手試一下吧,好運。