我正在停止我的应用程序中的一项服务,想知道它的用途是什么 ExitProcess 以及我是否应该使用它
最佳答案
您永远不需要使用 ExitProcess()
来停止服务。事实上,您根本不需要使用 ExitProcess()
。
服务与 SCM 紧密相连,如果它认为应该运行的服务消失了,它会采取一些措施来修复它。极端情况下,会强制系统重启。
停止服务的正确方法是使用记录的 API 要求 SCM 要求停止服务。此过程通常需要几秒钟才能完成,因为服务本身通常需要在要求其工作线程完成并停止后彻底关闭。
与 SCM 交互所需的权限比结束任意进程所需的权限要小,但通常不会在管理员组之外授予这两种权限。
编辑:评论询问如何从内部停止服务。
这可能是一个艰难的决定,尤其是当服务处于某种不幸的状态时。服务和 SCM 绝对必须同意服务正在停止,否则 SCM 将采取为服务配置的恢复操作。
我确实有一个完整的服务实现,可以作为如何处理其中一些事情的替代观点。是LuaService并且是一个允许以纯粹的方式实现(单工作线程)服务的框架Lua除了 LuaService 可执行文件本身之外。它的reference manual尝试完整地记录内部结构,并记录服务生命周期的一些细节,这些细节通过 MSDN 上的各种文章的交互来记录。
关于c++ - 在 C++ 中停止服务何时使用 ExitProcess() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/976573/