編寫c 服務

2021-06-25 23:23:31 字數 3470 閱讀 3107

//服務程式主函式。

#include "stdafx.h"

#include "windows.h"

#define szservicename "servicesample" //標識服務的內部名

//內部變數

bool bdebugserver=false;

service_status ssstatus;

service_status_handle sshstatushandle;

dword dwerr=0;

tchar szerr[256];

//下面的函式由程式實現

void winapi service_main(dword dwargc, lptstr *lpszargv);

void winapi service_ctrl(dword dwctrlcode);

void installservice();

void removeservice()

void debugservice(int argc,char** argv)

//bool reportstatustoscmgr(dword dwcurrentstate,dword dwwin32exitcode,dword dwwaithint)

////

void addtomessagelog(lptstr lpszmsg)

//bool sendstatustoscm (dword dwcurrentstate,

// dword dwwin32exitcode,

// dword dwservicespecificexitcode,

// dword dwcheckpoint,

// dword dwwaithint)

bool reportstatustoscmgr(dword dwcurrentstate,dword dwwin32exitcode,dword dwwaithint)

return success;

} int _tmain(int argc, _tchar* argv),

}; char szbuf[1024] = ;

sprintf(szbuf, "引數個數%d\n", argc);

addtomessagelog(szbuf);

for (int i=0; i1)

else if(_stricmp("remove",argv[1])==0)

else if(_stricmp("debug",argv[1])==0)

else

exit(0);

} else

return 0;

}//服務入口點函式

void servicestart(dword dwargc,lptstr* lpszargv) //具體服務的初始化入口函式

void winapi service_main(dword dwargc, lptstr *lpszargv)

//初始化 service_status 結構中的成員

ssstatus.dwservicetype=service_win32_own_process;

ssstatus.dwservicespecificexitcode=0;

//更新服務狀態

if(!reportstatustoscmgr(

service_start_pending,//服務狀態,the service is starting.

no_error, //退出碼

3000)) //等待時間

goto cleanup; //更新服務狀態失敗則轉向 cleanup

servicestart(dwargc,lpszargv);

reportstatustoscmgr(service_running,dwerr,0);

while(1)

return;

cleanup:

//把服務狀態更新為 service_stopped,並退出。

if(sshstatushandle)

(void)reportstatustoscmgr(service_stopped,dwerr,0);

}void servicestop()

//控制處理程式函式

void winapi service_ctrl(dword dwctrlcode)

; sprintf(szbuf, "dwctrlcode[%d]\n", dwctrlcode);

addtomessagelog(szbuf);

//處理控制請求碼

switch(dwctrlcode)

//暫停服務

case service_control_pause:

reportstatustoscmgr(service_stop_pending,no_error,500);

//servicepause(); //由具體的服務程式實現

ssstatus.dwcurrentstate=service_paused;

return;

//繼續服務

case service_control_continue:

reportstatustoscmgr(service_stop_pending,no_error,500);

//servicecontinue(); //由具體的服務程式實現

ssstatus.dwcurrentstate=service_running;

return;

//更新服務狀態

case service_control_interrogate:

break;

//無效控制碼

default:

break;

} reportstatustoscmgr(ssstatus.dwcurrentstate,no_error,0);

}//安裝服務程式

void installservice()

//開啟服務管理資料庫

schscmanager=openscmanager(

null, //本地計算機

null, //預設的資料庫

sc_manager_all_access //要求所有的訪問權

);if(schscmanager)

else

closeservicehandle(schscmanager);

} else

_tprintf(text("openscmanager failed - %s /n"),getlasterror());

}

C 編寫Windows服務

使用c 編寫windows 服務,我所看的文章如下 紅色的 以內,來自 前一段時間我寫了一篇通過寫服務的形式來達到一些監視程式執行的目的的 文章 至於如何在windows 下寫服務我沒有詳細介紹,今天就讓 我們 一起看看如何來寫服務程式。windows 服務被 設計 用於需要在後台執行的應用程式以及...

C 編寫Windows服務

使用c 編寫windows 服務,我所看的文章如下 紅色的 以內,來自 前一段時間我寫了一篇通過寫服務的形式來達到一些監視程式執行的目的的 文章 至於如何在windows 下寫服務我沒有詳細介紹,今天就讓 我們 一起看看如何來寫服務程式。windows 服務被 設計 用於需要在後台執行的應用程式以及...

C 編寫windows服務

windows服務大家都知道,就是這些東東。如下 開啟vs2008,新建乙個windows服務專案。切換到設計檢視,拖乙個timer控制項上去。如下 ok,設定timer的enable true,interval 1000。雙擊timer控制項,寫如下 private void timer1 tic...