Winapi 如何从服务返回错误?
我正在编写一个服务应用程序,有时在从服务MMC接收到服务控制停止后无法立即停止。我目前是这样处理的:(在伪代码中): 当服务可以停止(并且确实停止)时,它工作得很好,但当它无法停止时,我希望Windows报告我返回的错误(本例中为error_BUSY)。相反,Windows会显示一条消息,说明:Winapi 如何从服务返回错误?,winapi,windows-services,service,Winapi,Windows Services,Service,我正在编写一个服务应用程序,有时在从服务MMC接收到服务控制停止后无法立即停止。我目前是这样处理的:(在伪代码中): 当服务可以停止(并且确实停止)时,它工作得很好,但当它无法停止时,我希望Windows报告我返回的错误(本例中为error_BUSY)。相反,Windows会显示一条消息,说明: "The service did not return an error. This could be an internal Windows error or an internal service
"The service did not return an error.
This could be an internal Windows error or an internal service error."
所以我的问题是,如何使服务报告返回到SCM,它现在不能停止,并使MMC显示一条关于我返回的实际错误代码的消息 我知道这不能回答你的具体问题。但我认为答案是“没有办法”。无论如何,我会提出一个建议。大多数需要更多控制启动和关闭的应用程序,我可以想到Sap和Oracle,将windows服务用作管理服务,并实现gui或命令行界面来启动和停止实际的“工作进程”。回答我自己的问题(在更详细地调查问题之后):服务应向SCM报告其状态,指示其是否可以接受服务控制停止代码,而不是从HandlerEx函数返回错误代码。如果服务检测到无法立即停止,则应清除其service_状态结构中的service_ACCEPT_STOP位,并调用SetServiceStatus()。这将首先防止SCM试图停止服务。当条件清除并且服务决定可以安全停止时,它应该设置服务_ACCEPT_stop位并再次调用SetServiceStatus() 这正是我正在做的。但这并不能回答我的问题,对不起。
"The service did not return an error.
This could be an internal Windows error or an internal service error."