- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC建立Service服务应用程序
services.msc mstsc VC++建立Service服务应用程序 服务控制管理器 SCM本身也是一个服务程序(\windows\system32\servics.exe),作为windows的后台服务运行的。Winlogon在系统引导的早期会将SCM启动起来。SCM的服务入口函数首先创建一个初始化为无信号的同步事件对象(SvcCtrlEvent_A3752DX);接下来,它开始建立一个内部服务数据库,这个数据库要按事先规定好的一个顺序列出所有服务组,并记录与服务相关的详细信息;当这个数据库建立完成时SCM就开始按顺序启动那些启动方式为自动的服务,如果有服务要动行于指定用户账户中时还要调用LSASS,如果服务启动失败则会被放入一个名为ScFailedDrivers的列表中。当这些工作都完成后,SCM将同步事件对象SvcCtrlEvent_A3752DX置为有信号状态;并做好系统停机的准备。 当系统要关机时会向Windows子系统进程Csrss发送一个消息,以便调用Csrss的停机例程。Csrss会对所有活动的进程循环通知系统正在停机。对于除SCM以外的每一个系统进程如果没有返回退出的响应Csrss 都会等待由HKEY_USER\.DEFAULT\Control Panel\Desktop\WaitToKillAppTimeout指定的毫秒数(我的系统中是20000,也就是20秒),然后知通下一个进程结束。当遇到SCM时也会通知SCM进程系统正在停机,但不同的是会使用一个专用的超时间隔值(SCM在系统初始化时要向Csrss登记,于是Csrss就将SCM的进程ID保存了下来Csrss也就是通过个ID来识别SCM的)。这个专用的超时间隔位于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout中,有趣的是默认值也是20秒。这在段时间里SCM要通知所有在初始化时(服务程序自身初始化)请求SCM通知自己系统停机的服务,SCM有一个停机处理器负责这项工作。通知下达后SCM就等待服务退出,服务在接收到停机消息后会返回给SCM一个等待时间,SCM跟踪所有服务返回等待时间找出其中的最大值,当这个最大值达到后,如果有一个服务或多个服务又告诉SCM它们正在处理停机工作,那么SCM还会循环等待下去,但Csrss也再等待SCM当Csrss等待超时后,会继续后面的停机工作最终完成停机。 这就要求服务程序要在Csrss等待SCM的这段时内完成自己的停机处理工作,否则服务就没机会在系统停机前完成自己的关闭工作了。 服务程序 Windows服务程序其实并不神秘,它只是遵循特定规则编写的一个程序。只要遵循这个特定的规则与服务控制管理器正确的交互,就可实现我们的服务程序。而我们只要能实现一个简单的服务程序,设计一个能处理复杂业务的服务也并非难事,因为从结构上看两者并没有太大的区别。只要遵循与SCM交互的规则,设计服务程序与设计普通的应用程序几乎没什么区别。 服务的安装与卸载 ??? 服务程序编写完成并编译通过后,还要安装注册到操作系统中,这样它才会出现在管理工具-服务,那个管理器里面。API给我们提供了一个函数来实现我们注册服务的功能; SC_HANDLE CreateService(? SC_HANDLE hSCManager,?// 服务控制管理器的句柄 ?? LPCTSTR lpServiceName, // 指向服务的内部名称 LPCTSTR lpServiceName,, // 指向服务的显示名称? DWORD dwDesiredAccess, // 服务的访问类型 DWORD dwServiceType,?? // 服务的类型? DWORD dwStartType,???? // 服务的启动方式(自动,手动,禁用)? DWORD dwErrorControl,?// 错误控制方式? LPCTSTR lpBinaryPathName,?// 服务程序的路径? LPCTSTR lpLoadOrderGroup,?// 服务组的名称 ?? LPDWORD lpdwTagId,???? // 服务的标签号? LPCTSTR lpDependencies,?// 服务依赖的服务或组名? LPCTSTR lpServiceStartName, // 服务的启动帐户? LPCTSTR lpPassword?????? // 服务启动帐户的密码); OpenSCManager SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDe
您可能关注的文档
最近下载
- 高清版-40篇短文记完高中3500核心词汇120页.pdf VIP
- 新人教版高中数学必修第一册全册单元测试卷(原卷+解析).pdf VIP
- 爱德华消防主机操作手册.doc VIP
- 包皮过长健康宣教PPT.pptx
- 高血压病的防治知识讲座含内容.pptx VIP
- 风能发电系统 漂浮式海上风力发电机组一体化计算分析导则及编制说明.pdf VIP
- 2024年北京市普通高中学业水平等级性考试地理试卷(含答案).pdf VIP
- 生猪屠宰兽医卫生检验人员考试题库5份(含答案).docx
- 2017款长城哈弗M6-2017款1.5T手动自动两驱蓝标_汽车使用手册用户操作图解驾驶车主车辆说明书电子版.pdf VIP
- 二月闹肠胀气(宝宝哭闹护理手册).pdf
文档评论(0)