- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
井民全制作31
How to create a Windows service 井民全製作 Introduction to service Service 基本上是 Win32 執行檔 (.exe) 由 SCM (Service Control Manager)載入 你可以設定 每次 開機都啟動 或 手動啟動 撰寫你的 service 主程式-- 連接 SCM StartServiceCtrlDispatcher 將你 service的進入函式與SCM 連接起來 撰寫你的 service 主程式-- service entry point function Installing your service OpenSCManager - 連線 SCM 功能: 建立與指定電腦 Service Control Manager 的連線並且開啟資料庫 使用 CreateService 安裝 service 安裝你的 Service – install.cpp 如何利用程式啟動 service? 如何利用程式停止 service? 如何移除一個 service? * * 參考資料: Beginners introductory guide to writing,installing,starting,stopping NT services SERVICE_TABLE_ENTRY servicetable[]= { {strServiceName, (LPSERVICE_MAIN_FUNCTION) ServiceMain}, {NULL,NULL} }; StartServiceCtrlDispatcher (servicetable); Step 1:輸入 service entry Step 2: 連接控制器 Service entry function 表示結束 連接成功? nonzero SCM 控制器會幫我們呼叫 ServiceMain 目的: 1. 設定控制 function (Stop,Start) 2. 執行 Service 工作 ServiceMain function 由 SMC 啟動 我們的 Service 由 ServiceMain 開始執行 void ServiceMain(DWORD argc, LPTSTR *argv){ } 1. 註冊 service handle function 2. 建立 event object 做等待的工作 3. 建立 thread 執行你指定的工作 WaitForSingleObject while(nServiceRunning){ Beep(450,150); Sleep(1000); } 指定的工作 若有人 signal event, 才結束 service 在背景執行, 每隔 1 秒 Beep ServiceMain 主要目的: 1. 設定控制 function (Stop,Start) 2. 執行 Service 工作 我們的背景程式 1. 註冊 service handle function nServiceStatusHandle=RegisterServiceCtrlHandler( strServiceName, (LPHANDLER_FUNCTION) ServiceCtrlHandler); 你的service name 指定 service handle 函式 void ServiceCtrlHandler(DWORD nControlCode){ BOOL success; switch(nControlCode){ case SERVICE_CONTROL_SHUTDOWN: case SERVICE_CONTROL_STOP: nServiceCurrentStatus=SERVICE_STOP_PENDING; success=UpdateServiceStatus(SERVICE_STOP_PENDING,NO_ERROR,0,1,3000); KillService(); return; default: break; } UpdateServiceStatus(nServiceCurrentStatus,NO_ERROR,0,0,0); } 當關機時 當停止 servi
文档评论(0)