製作服務程式

2021-06-16 01:33:43 字數 2371 閱讀 5184

用vc++建立service服務應用程式

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

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

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

bool isinstalled();

bool install();

bool uninstall();

void logevent(lpctstr pszformat, ...);

void winapi servicemain();

void winapi servicestrl(dword dwopcode);

tchar szservicename = _t("servicetest");

bool binstall;

service_status_handle hservicestatus;

service_status status;

dword dwthreadid;

三、新增init初始化函式。
void init()

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

bool uninstall();

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

void winapi servicemain()

setservicestatus(hservicestatus, &status);

status.dwwin32exitcode = s_ok;

status.dwcheckpoint = 0;

status.dwwaithint = 0;

status.dwcurrentstate = service_running;

setservicestatus(hservicestatus, &status);

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

int i = 0;

while (i < 10)

//status.dwcurrentstate = service_stopped;

setservicestatus(hservicestatus, &status);

logevent(_t("service stopped"));

}

六、在主線程函式裡註冊控制函式和程式執行主體。這裡主要是說明這就是程式的執行體。
void winapi servicemain()…}

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

hinstance hprevinstance,

lpstr lpcmdline,

int ncmdshow)

,

};if (stricmp(lpcmdline, "/install") == 0)

else if (stricmp(lpcmdline, "/uninstall") == 0)

else }

return 0;

}

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

redis 服務製作

linux cp redis 4.0.1 utils redis init script etc init.d redis vi etc rc.d init.d redis 第2行 chkconfig 2345 80 90 2345服務的執行級是2 3 4和5級 linux的執行級為0到6 80是啟...

程式報表製作

程式報表製作總結 題記 一顆不甘平凡的心,促使我進步 無論你是資料庫工程師,還是語言工程師,或多或少一定會接觸過報表,並從中吸收,成長,進步。但是lz個人在剛入門的時候也是存在一些困惑,遇到一些理解上的障礙,導致工作中走了很多彎路,並且很少有人分享這方面的內容 可能大神覺得這些 太low,沒什麼技術...

rome製作rss服務

rome製作rss服務 2011年04月01日 最近用rome做了乙個rss服務,大致的內容如下,有不妥的地方,請指正 rsschanneldo類 public class rsschanneldo public void settitle string title public string ge...