编写一个简单的服务程序

网上已经有很多介绍编写服务程序的文章,而且《Win32系统服务开发与实例》这本书更加系统详细地介绍了。不过我想自己下笔写写,这样更能帮助我消化。

每个服务都是根据一个框架来搭建的,只要掌握了这个框架,就可以编写一个简单的服务程序了。下面首先来介绍这个框架。
这个框架主要包括3个函数:main(),ServiceMain()和ServiceCtrlHandler()。

main()函数,主要向SCM注册ServiceMain函数,它先初始化一个SERVICE_TABLE_ENTRY结构,这个结构主要记载了你将要创建的服务名称和对应服务的ServiceMain函数,这里可以填写多个服务,后面会介绍如何填写这个结构。填写了这个结构之后,就该时候调用StartServiceCtrlDispatcher函数来向SCM注册这个结构了。这里有一点要注意的是,从main开始执行,到调用StartServiceCtrlDispatcher函数之间的时间不能超过30秒,不然的话,SCM就会认为是时间超时,内部出现错误,从而终止服务。

ServiceMain()函数,当SCM启动服务的时候,系统会自动调用相应服务的ServiceMain函数。在这个函数里面可以完成一些初始化工作,主要包括注册请求操作函数,调用RegisterServiceCtrlHandler函数来完成。当SCM发送停止、暂停、重新开始等等请求的时候,该函数会自动被调用,来处理这些请求信息。ServiceMain函数的另外一个重大任务是创建真正的服务线程或者进程,这些线程和进程主要来执行你要做的服务工作。这里要注意的是,如果ServiceMain函数返回了,该服务就会终止,所以在正常的情况下,你要保证你的服务继续运行,你可以通过设置一个事件,然后在ServiceMain函数的后面等待这个事件。

ServiceCtrlHandler()函数,该函数主要处理发送给服务的请求信息,例如停止、暂停、重新开始。它接收一个整数控制代码,然后你需要判断这个控制代码对应的是什么请求,然后再完成相应的处理工作。
主要的控制代码有:
SERVICE_CONTROL_STOP:通知服务停止
SERVICE_CONTROL_PAUSE:通知服务暂停
SERVICE_CONTROL_CONTINUE:通知服务重新开始
SERVICE_CONTROL_INTERROGATE:通知服务立即报告当前状态
SERVICE_CONTROL_SHUTDOWN:通知服务紧急关闭

下面是一个简单服务程序:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值