我继承了基于旧 ATL 的服务的 C++ 代码,其中包含旧 ATL 向导的基本结构(_tWinMain()、Run()、RunMessageLoop() 等)。
特别是,这段代码已经处理了“Shutdown”和“Stop”事件——我被要求在“PreShutdown”事件中添加一个额外的关闭项。
我添加了 SERVICE_ACCEPT_PRESHUTDOWN 选项..
m_status.dwControlsAccepted |= SERVICE_ACCEPT_PRESHUTDOWN
..但我看不到如何捕获结果事件 - SERVICE_CONTROL_PRESHUTDOWN - 因为 ATL 似乎提供“OnShutdown”和“OnClose”方法但不包含我可以看到的“OnPreShutdown”条目。
任何人都可以指出一些允许我向现有代码添加 OnPreShutdown 的东西吗?
最佳答案
ATL Services 介绍了使用 ATL 实现服务.要处理默认 ATL 生成的服务不会处理的控制请求,您需要扩展默认生成的 Handler
实现。
这是您需要做的事情的粗略描述(除了注册您已经注册的控制请求):
void CMyServiceModule::Handler(DWORD dwOpcode) throw() {
if (SERVICE_CONTROL_PRESHUTDOWN == dwOpcode) {
// Perform custom handling
}
else {
// Pass all other control codes to default implementation
__super::Handler(dwOpcode);
}
}
作为替代方案,您可以覆盖 OnUnknownRequest
自定义实现中的成员。对于默认实现未处理的所有代码调用此成员:
void CMyServiceModule::OnUnknownRequest(DWORD dwOpcode) {
if (SERVICE_CONTROL_PRESHUTDOWN == dwOpcode) {
// Perform custom handling
}
else {
// Possibly handle other control codes
}
}
关于c++ - 如何将 PreShutdown 事件添加到 ATL 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105336/