【发布时间】:2020-11-19 05:04:17
【问题描述】:
我想在服务崩溃时运行另一个程序。我知道我应该使用微软提供的SERVICE_FAILURE_ACTIONS 和ChangeServiceConfig2()。但是,我在使用它们时遇到了困难,因为我找不到任何使用这些结构和功能的例子。
如果有人可以向我展示一个实现此功能的示例,我将不胜感激。
【问题讨论】:
标签: c++ windows visual-studio api visual-c++
我想在服务崩溃时运行另一个程序。我知道我应该使用微软提供的SERVICE_FAILURE_ACTIONS 和ChangeServiceConfig2()。但是,我在使用它们时遇到了困难,因为我找不到任何使用这些结构和功能的例子。
如果有人可以向我展示一个实现此功能的示例,我将不胜感激。
【问题讨论】:
标签: c++ windows visual-studio api visual-c++
这并不难。你需要这样的东西:
SC_ACTION sc_actions = { SC_ACTION_RUN_COMMAND, 0 };
TCHAR command [] = __T ("path/to/command");
SERVICE_FAILURE_ACTIONS failure_actions =
{ INFINITE, NULL, command, 1, &sc_actions);
BOOL ok = ChangeServiceConfig2 (service_handle,
SERVICE_CONFIG_FAILURE_ACTIONS, &failure_actions);
正如documentation 所述,service_handle 是通过调用OpenService 获得的。
【讨论】:
const 似乎是个坏主意。 Some Windows APIs actually do overwrite their input parameters 因此不建议将字符串文字传递给未声明 LPC(T|W)STR 的参数。