c++ - 在 C++ 中停止服务何时使用 ExitProcess() 函数

标签 c++ service

我正在停止我的应用程序中的一项服务,想知道它的用途是什么 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/

相关文章:

c++ - 在新结构中声明的数组的地址

c++ - 查找数组中最大数的有效方法

c++ - 访问者模式应该用于渲染吗?

c++ - 在 SetUnhandledExceptionFilter 的处理程序中如何打印堆栈跟踪?

android - 即使在应用程序最小化状态下,如何始终运行 asynctask?

C++:使用动态内存创建动态数组

崩溃后 Android 辅助功能服务不会重新启动

.net - ServiceRoute + WebServiceHostFactory 杀死 WSDL 生成?如何使用 ?wsdl 创建无扩展 WCF 服务

android - 更新服务中的 MusicPlayer SeekBar

Android 如何停止 START_STICKY 服务