windows 之服務程式

2021-08-19 20:29:47 字數 1149 閱讀 3701

windows 服務由三部分組成:1.乙個服務可執行檔案;2.乙個服務控制程式(scp);3.服務控制管理器(scm),負責在 hklm\system\currentcontrolset\services 下建立服務鍵值。使用者可通過 scp 控**務的啟動、停止、暫停等,scp 會通過 scm 呼叫服務程式。

由於windows服務不需要介面,所以大部分程式為win32控制台應用程式,所以程式主函式為main 而不是winmain()。在主函式要做的主要工作就是兩件事:

① 初始化乙個service_table_entry 分派表結構體。

② 然後呼叫startservicectrldispatcher();這將把呼叫程序的主線程轉換為控制分派器。該分派器啟動乙個新執行緒,該執行緒執行分派表中對應於你的服務的servicemain()函式。

scm 啟動服務程序時,該程序必須立即呼叫

startservicectrldispatcher() 函式,該函式

接收乙個

服務入口點列表

,每個入口點對應該程序中的乙個服務,每個入口點由其所對應的

服務名稱

來標識;

舉個栗子:

先使用service_table_entry 建立乙個結構體,

service_table_entry st =,};

st[0].

lpservicename

= 「servicename」;

st[0].

lpserviceproc

= (lpservice_main_function)servicemain;

接下來再呼叫startservicectrldispatcher()

startservicectrldispatcher(

st) 這裡的這個

st就是上文中提到的服務入口點列表了。

服務需要做的工作就在servicemain()函式中。

下面給出乙個servicemain() 的栗子:

void winapi servicemain(

int

argc, 

char

** argv)

}__except( seh_exception_filter() )

}

windows服務程式

有時候需要windows服務程式來執行一些操作,比如需要在登陸前啟動,不想被殺軟判為自啟動,當然還是能被發現,但是殺軟的普通清理時不會清理的。但是服務程式不能進行介面互動,因為他不屬於使用者介面。他只是在後台默默的啟動,執行,對於收集資料,後台更新再合適不過了。乙個服務程式的簡單寫法 service...

Windows 服務程式配置

目標 1.實現配置後台服務,使其自動啟動。2.當程式down後,會自動啟動。主要流程 1.判斷是否已經是服務在執行 argv 2.如果是第一次執行,初始化服務 sc handle sc handle openscmanager null,null,sc manager all access if s...

Windows服務程式編寫

windows服務程式編寫 2014年8月17日16 08 55 1 用vs2008新建乙個空的控制台工程。如下 include include ifdef unicode define t s l s else define t s s endif define sleep time 5000 間...