停止关于Windows服务的问题
我写了一个服务程序,但我希望在处理"停止服务"(SERVICE_CONTROL_STOP)的请求时,处理一个特殊处理: 如果目前我的服务程序不能被停止(如:一个客户正在使用服务), 我希望给服务管理器返回一个错误信息,并且拒绝停止服务.
于是我这样处理:在处理服务控制消息的HandlerProc函数中,如果收到"SERVICE_CONTROL_STOP"消息时,服务不能被停止,我就调用SetServiceStatus设置状态的dwCurrentState为SERVICE_RUNNING,并在dwWin32ExitCode中填一个错误代码.
但这样处理的结果并非是我期望的:在服务管理器上执行"停止"时,服务管理器提示"本地计算机无法终止xxxx服务. 服务器并未返回错误. .....", 此时服务仍处于运行状态.(这里虽然处于运行状态,但是却没有提供返回的错误信息.) 但是如果接着再执行"停止",出人意料的事情出现了,控制消息处理函数HandlerProc()并未被调用,服务直接就被结束了!
非常具有讽刺意味的是,如果我在收到"SERVICE_CONTROL_STOP"时,SetServiceStatus设置状态dwCurrentState为SERVICE_STOPPED,并且在dwWin32ExitCode中填一个错误代码,服务管理器在执行"停止"时,会出现提示"在 本地计算机 无法终止xxxx服务, 错误.......",这个提示正是我期望出现的,然而,此时服务却并非像提示("无法终止")中的那样, 立即结束了. :(
请问,如果才能实现我前面提到的需求呢(即:试图停止服务时,给出错误提示,并拒绝停止服务,无论尝试多少次,只要条件未达到,都不允许停止).
(BTW, 我的操作系统是XP Professional SP2)