使用c++ 編寫windows 服務,我所看的文章如下(紅色的"=" 以內, 來自 ):
**********====
前一段時間我寫了一篇通過寫服務的形式來達到一些監視程式執行的目的的 文章 ,至於如何在windows 下寫服務我沒有詳細介紹,今天就讓 我們 一起看看如何來寫服務程式。
windows 服務被 設計 用於需要在後台執行的應用程式以及實現沒有使用者互動的任務。為了學習這種控制台應用程式的基礎 知識 ,c (不是c++ )是最佳 選擇 。本文將建立並實現乙個簡單的服務程式,其功能是查詢系統中可用物理記憶體數量,然後將結果寫入乙個文字檔案。 最後 ,你可以用所學知識編寫自己的 windows 服務。
當初我寫第乙個 nt 服務時,我到 msdn 上找例子。在那裡我找到了一篇 nigel thompson 寫的文章:「creating a ****** win32 service in c++」 ,這篇文章附帶乙個 c++ 例子。雖然這篇文章很好地解釋了服務的 開發 過程,但是,我仍然感覺缺少我需要的重要 資訊 。 我想理解通過什麼框架,呼叫什麼函式,以及何時呼叫,但 c++ 在這方面沒有讓我輕鬆多少。物件導向的方法固然方便,但由於用類對底層 win32 函式呼叫進行了封裝,它不利於學習服務程式的基本知識。這就是為什麼我覺得 c 更加適合於編寫初級服務程式或者實現簡單後台任務的服務。在你對服務程式有了充分透徹的理解之後,用 c++ 編寫才能游刃有餘。當我離開原來的工作崗位,不得不向另乙個人轉移我的知識的時候,利用我用 c所寫的例子就非常容易解釋 nt 服務之所以然。
服務是乙個執行在後台並實現勿需使用者互動的任務的控制台程式。windows nt/2000/xp 作業系統提供為服務程式提供專門的支援。人們可以用服務控制面板來配置安裝好的服務程式,也就是 windows 2000/xp 控制面板| 管理工具中的「服務」 (或在「 開始」|「 執行」 對話方塊中輸入 services.msc /s—— 譯者注)。可以將服務配置成作業系統啟動時自動啟動,這樣你就不必每次再重啟系統後還要手動啟動服務。
本文將首先解釋如何 建立 乙個定期查詢可用物理記憶體並將結果寫入某個文字檔案的服務。然後指導你完成生成,安裝和實現服務的整個過程。
第一步:主函式和全域性定義
首先,包含所需的標頭檔案。例子要呼叫 win32 函式(windows.h )和磁碟檔案寫入(stdio.h ):
#include
#include
接著,定義兩個常量:
#define sleep_time 5000
#define logfile "c://myservices"
sleep_time 指定兩次連續查詢可用記憶體之間的毫秒間隔。在第二步中編寫服務工作迴圈的時候要使用該常量。
logfile 定義日誌檔案的路徑,你將會用 writetolog 函式將記憶體查詢的結果輸出到該檔案,writetolog 函式定義如下:
int writetolog(char* str)
宣告幾個全域性變數,以便在程式的多個函式之間共享它們值。此外,做乙個函式的前向定義:
service_status servicestatus;
service_status_handle hstatus;
void servicemain(int argc, char** argv);
void controlhandler(dword request);
int initservice();
現在,準備工作已經就緒,你可以開始編碼了。服務程式控制臺程式的乙個子集。因此,開始你可以定義乙個 main 函式,它是程式的入口點。對於服務程式來說,main 的**令人驚訝地簡短,因為它只建立分派表並啟動控制分派機。
void main()
乙個程式可能包含若干個服務。每乙個服務都必須列於專門的分派表中(為此該程式定義了乙個 servicetable 結構陣列)。這個表中的每一項都要在 service_table_entry 結構之中。它有兩個域:
lpservicename: 指向表示服務名稱字串的指標;當定義了多個服務時,那麼這個域必須指定;
lpserviceproc: 指向服務主函式的指標(服務入口點);
分派表的最後一項必須是服務名和服務主函式域的 null 指標,文字例子程式中只宿主乙個服務,所以服務名的定義是可選的。
C 編寫Windows服務
使用c 編寫windows 服務,我所看的文章如下 紅色的 以內,來自 前一段時間我寫了一篇通過寫服務的形式來達到一些監視程式執行的目的的 文章 至於如何在windows 下寫服務我沒有詳細介紹,今天就讓 我們 一起看看如何來寫服務程式。windows 服務被 設計 用於需要在後台執行的應用程式以及...
C 編寫windows服務
windows服務大家都知道,就是這些東東。如下 開啟vs2008,新建乙個windows服務專案。切換到設計檢視,拖乙個timer控制項上去。如下 ok,設定timer的enable true,interval 1000。雙擊timer控制項,寫如下 private void timer1 tic...
C 編寫windows服務
專案要求 表結構如下 過程 vs 檔案 新建專案 windows windows 服務新增安裝程式 service1.cs 設計 右鍵 新增安裝程式 選中serviceinstaller1 右鍵 服務名稱 填寫自定義服務名稱 這裡填寫magicfilemonitorservice 選中service...