VC 服務程式程式設計

2021-05-10 15:04:31 字數 3425 閱讀 2267

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

主要使用到的函式(詳情請看msdn):

1.openscmanager:開啟服務管理器

winadvapi

sc_handle

winapi

openscmanager(

__in_opt        lpcstr                lpmachinename,//計算機名,null表示本地計算機

__in_opt        lpcstr                lpdatabasename,//資料庫名,預設值是services_active_database 

__in            dword                   dwdesiredaccess//訪問許可權

);引數dwdesiredaccess的取值有:

sc_manager_connect         //可連線      

sc_manager_create_service    //能建立服務

sc_manager_enumerate_service   

sc_manager_lock                       

sc_manager_query_lock_status   

sc_manager_modify_boot_config 

2.createservice:建立服務

winadvapi

sc_handle

winapi

createservice(

__in        sc_handle    hscmanager,//服務管理器

__in        lpcstr     lpservicename,  //服務名

__in_opt    lpcstr     lpdisplayname,//顯示名字

__in        dword        dwdesiredaccess,//訪問許可權

__in        dword        dwservicetype,//服務型別,見msdn

__in        dword        dwstarttype,//怎麼啟動的?

__in        dword        dwerrorcontrol,

__in_opt    lpcstr     lpbinarypathname,//啟動路徑

__in_opt    lpcstr     lploadordergroup,

__out_opt   lpdword      lpdwtagid,

__in_opt    lpcstr     lpdependencies,

__in_opt    lpcstr     lpservicestartname,

__in_opt    lpcstr     lppassword

);3.其他函式

openservice:開啟服務

controlservice:控**務

deleteservice:刪除服務

registerservicectrlhandler:註冊服務控制項控制代碼,返回的是服務狀態型別

setservicestatus 設定服務狀態資訊

startservicectrldispatcher:在主線程裡面開始服務指派

下面通過例項說明一下:

》宣告成員變數:

service_status_handle m_hservicestatus;

》建立服務

bool  install()            //安裝服務

sc_handle hscm= openscmanager(null, null, sc_manager_create_service);

if (!hscm)//開啟服務管理器失敗

return false;

//建立服務

sc_handle hservice = ::createservice(

hscm, szservicename, szservicename,

service_all_access, service_win32_own_process,

service_demand_start, service_error_normal,

szfilepath, null, null, _t(""), null, null);

changeserviceconfig2(.............);//還可以配置服務的資訊

//最後要關閉控制代碼

::closeservicehandle(hservice);

::closeservicehandle(hscm);

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"));

}《》最後我們需要在主函式,或者應用程式的main函式裡面註冊,安裝,解除安裝服務。。。

加入下面的**:

parsecommandline(m_trcmdinfo);//得到命令引數lpcmdline

service_table_entry st =,};

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

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

else

用 VC 建立 Windows 服務程式

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

用 VC 建立 Windows 服務程式

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

VC 建立Windows服務程式2

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