VC 建立Windows服務程式2

2021-08-07 02:58:04 字數 4757 閱讀 6047

本文主要介紹了 openscmanager、createservice、openservice、controlservice、deleteservice、registerservicectrlhandler、setservicestatus、startservicectrldispatcher等操作服務程式的主要幾個api的用法,具體的函式引數大家可以查閱msdn。

為什麼要使用服務應該程式呢?服務程式就像系統的一些服務一樣,能夠自動地啟動,並執行相應的操作;而且因為服務程式的在層次上和一般的應用程式不同,其能夠在系統啟動時就自動地執行,而不像一般的應用程式那樣一定要在登陸後才能執行,這些就是服務的一些好處了,如果你也想你的程式具有這樣的功能,那麼你就可以建立乙個服務應用程式了。下面就跟著我一步一步地教你怎麼去建立乙個服務應用程式吧。

二、定義全域性函式變數。這裡主要是設定服務控制代碼和狀態。

01.boolisinstalled();

02.boolinstall();

03.booluninstall();

04.voidlogevent(lpctstrpszformat, ...);

05.voidwinapi servicemain();

06.voidwinapi servicectrl(dworddwopcode);

07.

08.tcharszservicename = _t("servicetest");

09.boolbinstall;

10.service_status_handlehservicestatus;

11.service_status status;

12.dworddwthreadid;

三、新增init初始化函式。

01.voidinit()

02.

四、新增安裝和刪除服務函式。這裡主要是用到了四個函式 openscmanager 和 createservice。openscmanager 用於開啟服務控制管理器;createservice 用於建立服務;openservice用於開啟已有的服務,返回該服務的控制代碼;controlservice則用於控制已開啟的服務狀態,這裡是讓服務停止後才刪除;deleteservice 用於刪除指定服務。

01.boolinstall();

02.

18.

19.

20.booluninstall();

21.

五、新增服務主線程函式和控制函式。這裡呼叫 registerservicectrlhandler 來註冊服務的控制函式,這裡要設定status.dwcontrolsaccepted 為 service_accept_stop,否則你不能控制這個服務的狀態。

01.voidwinapi servicemain()

02.

14.setservicestatus(hservicestatus, &status);

15.

16.status.dwwin32exitcode = s_ok;

17.status.dwcheckpoint = 0;

18.status.dwwaithint = 0;

19.status.dwcurrentstate = service_running;

20.setservicestatus(hservicestatus, &status);

21.

22.//模擬服務的執行,10後自動退出。應用時將主要任務放於此即可

23.inti = 0;

24.while(i < 10)

25.

29.//

30.

31.status.dwcurrentstate = service_stopped;

32.setservicestatus(hservicestatus, &status);

33.logevent(_t("service stopped"));

34.}

六、在主線程函式裡註冊控制函式和程式執行主體。這裡主要是說明這就是程式的執行體。

01.voidwinapi servicemain()

02.

13.

14.

15.}

七、最後,要在main函式裡註冊新增安裝、刪除、註冊主函式。

view source

print?

01.intapientry winmain(hinstancehinstance,

02.hinstancehprevinstance,

03.lpstrlpcmdline,

04.intncmdshow)

05.,

11.

12.};

13.

14.if(stricmp(lpcmdline,"/install") == 0)

15.

18.elseif(stricmp(lpcmdline,"/uninstall") == 0)

19.

22.else

23.

28.}

29.return0;

30.}

八、總結。其實做乙個服務程式並不難,主要是懂得程式的執行體放於**?和註冊程式的主函式和註冊控制函式,如果這兩個沒有註冊的話,你就程式就不知道如何去控制了。status.dwcontrolsaccepted = service_accept_stop;這個也重要,如果你沒有設定的話,那麼服務就不會受你控制了。

用 VC 建立 Windows 服務程式

本文主要介紹了 openscmanager createservice openservice controlservice deleteservice registerservicectrlhandler setservicestatus startservicectrldispatcher等操作...

用 VC 建立 Windows 服務程式

本文主要介紹了 openscmanager createservice openservice controlservice deleteservice registerservicectrlhandler setservicestatus startservicectrldispatcher等操作...

VC 建立Windows服務

我在開發的時候用到了dll裡面的函式,開始的時候採用的靜態匯入的方法,但是發現服務開機啟動以後就死掉了,這裡不是dll路徑的問題。沒辦法,自己只得用動態匯入的方法,還好,服務自動開機執行了,還算正常吧。當然,我這裡的初始化引數已經設定好了,在dos命令裡面安裝完成後,你會發現,那個框,我已經替你選上...