VC++ Service编程(三)服务入口

服务入口

    通常,我们把服务做成控制台程序。控制台程序的入口是main函数。main函数从注册表中的ImagePath值来获取参数,提供给服务。
    当SCM(服务控制管理器)开启一个服务,它就开始等待这个服务调用StartServiceCtrlDispatcher函数。使用下面的原则:
    1、SERVICE_WIN32_OWN_PROCESS类型的服务必须在主线程中马上调用StartServiceCtrlDispatcher函数。在服务启动后,你可以像“服务ServiceMain函数”中描述的那样,做任何初始化。
    2、 如果服务的类型是SERVICE_WIN32_SHARE_PROCESS,并且在这个服务中要为其它服务提供通用初始化。如果这些通用初始化可以在30秒内完成,你可以在主线程中调用StartServiceCtrlDispatcher函数之前做这些事情。否则,就必须创建另外一个线程来做这些通用的初始化。同时,在主线程中调用StartServiceCtrlDispatcher。
    StartServiceCtrlDispatcher为程序中的所有服务提供一个SERVICE_TABLE_ENTRY结构。每一个结构都指名服务的名称和入口。
    如果StartServiceCtrlDispatcher成功,调用它的线程要等到程序中所有服务都中止后才会返回。SCM利用一个已命名的管道来向这个线程发送控制请求。这个线程扮演一个控制调度员的角色,执行下面的任务:
    1、当新服务开始运行时,创建一个新的线程来调用相关的入口。
    2、调用相关的handler函数来处理服务控制请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值