c++ - 如何创建在崩溃时重新启动的服务

标签 c++ windows winapi service

我正在使用 CreateService 创建服务.如果它发生崩溃,该服务将再次正常运行,如果它崩溃,我希望 Windows 重新启动该服务。我知道可以从下面的服务 msc 进行设置。

Windows Service Recovery Dialog

如何以编程方式将服务配置为在发生崩溃时始终重新启动。

最佳答案

使用了 Deltanine 的方法,但稍作修改以便能够控制每个失败 Action :

SERVICE_FAILURE_ACTIONS servFailActions;
SC_ACTION failActions[3];

failActions[0].Type = SC_ACTION_RESTART; //Failure action: Restart Service
failActions[0].Delay = 120000; //number of milliseconds to wait before performing failure action = 2minutes
failActions[1].Type = SC_ACTION_RESTART;
failActions[1].Delay = 120000;
failActions[2].Type = SC_ACTION_NONE;
failActions[2].Delay = 120000;

servFailActions.dwResetPeriod = 86400; // Reset Failures Counter, in Seconds = 1day
servFailActions.lpCommand = NULL; //Command to perform due to service failure, not used
servFailActions.lpRebootMsg = NULL; //Message during rebooting computer due to service failure, not used
servFailActions.cActions = 3; // Number of failure action to manage
servFailActions.lpsaActions = failActions;

ChangeServiceConfig2(sc_service, SERVICE_CONFIG_FAILURE_ACTIONS, &servFailActions); //Apply above settings

关于c++ - 如何创建在崩溃时重新启动的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3242505/

相关文章:

c++ - 使用 cout 打印字符数组的全部内容

linux - Docker:无法运行存储在已安装卷中的 shell 脚本

winapi - 如何将击键发送到窗口而无需使用 Windows API 激活它?

c++ - RECT 和 POINT 数组之间的 reinterpret_cast 安全吗?

c++ - 使用 C++ Win32 API 在 Messagebox 中禁用右上角的 X 按钮图标?

c++ - 这不是 const auto& 多余的吗?

c++ - mirror这段代码可以进行什么样的矩阵变换呢?

java - Java 1.6 和 Desktop.open() 的问题

python , Windows : parsing command lines with shlex

c++ - 我如何复制窗口的可视内容并将其放在 win32 c++ 中的新窗口中?