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 間...