gpt4 book ai didi

c# - 为服务的 FailureAction 设置什么 REG-BINARY

转载 作者:太空狗 更新时间:2023-10-29 22:15:45 24 4
gpt4 key购买 nike

我有一项服务,我想在注册表中为其设置 FailureAction 的数据值。当前在注册表中设置了值。使用 RegKey.SetValue("FailureActions", Value) 设置值;

我想知道:

1) 这些字节的Value如何对应于服务的恢复选项(比如如何在注册表中找出特定的序列意味着将'First failure'设置为'Restart the Service')

2) 我还需要更改注册表 FailureAction,它将对应于“后续失败”作为“重新启动服务”

这是我使用试错法的发现:

a) 手动更改服务恢复设置,然后更改注册表项。复制该值并在代码中使用。它设置了“后续失败”

b) 在代码中更改原始值。它设置了“后续失败”

但是 a) 和 b) 的值不匹配,但如果我右键单击服务并查看恢复选项,我会看到相同的结果。为了理解这一点,我想知道问题 1) 和 2) 的答案。

感谢您的评论\线索。

最佳答案

为了解释 FailureActions 注册表项的数据值中字节的含义,我将举这个例子:

enter image description here

这个表示中的字节对应这个结构:

typedef struct _SERVICE_FAILURE_ACTIONS {
DWORD dwResetPeriod;
LPTSTR lpRebootMsg;
LPTSTR lpCommand;
DWORD cActions;
SC_ACTION *lpsaActions;
} SERVICE_FAILURE_ACTIONS, *LPSERVICE_FAILURE_ACTIONS;

前四个字节80 51 01 00dwResetPeriod结构成员的值。如果没有失败,这是将失败计数重置为零的时间。它以秒为单位计算。在这个例子中,重置周期是 0x15180 秒(因为小端)。在十进制中,它相当于 86400 秒或等于 24 小时。因此,如果在 24 小时内没有发生故障,则故障计数将重置为零。

接下来的四个字节00 00 00 00对应于lpRebootMsg。有关此结构成员和下一个成员的更多信息,请参见 here

接下来的四个字节 00 00 00 00 对应于 lpCommand

接下来的四个字节 03 00 00 00 对应于 cActions。该成员是 lpsaActions 数组中的元素数。在这种情况下,我们有 3 个元素。

接下来的四个字节 14 00 00 00 对应于 lpsaActions,它是指向 SA_ACTION 类型数组的指针。

最后,01 00 00 00 60 EA 00 00
01 00 00 00 60 EA 00 00
00 00 00 00 00 00 00 00
lpsaActions 指向的 SC_ACTION 类型数组的内容。我们有这个结构的 3 个实例对应于 3 行字节。结构 SC_ACTION 声明如下:

typedef struct _SC_ACTION {
SC_ACTION_TYPE Type;
DWORD Delay;
} SC_ACTION, *LPSC_ACTION;

有关SC_ACTIONSC_ACTION_TYPE 的更多信息,请参见here .

因此,第一行 01 00 00 00 60 EA 00 00 表示:“如果出现故障,请在 60 后重启服务 (01 00 00 00)秒(60 EA 00 00 == 到 0xEA60 毫秒 == 60000 毫秒 == 60 秒)。第二行意思相同。第三行表示“在失败的情况下,在 0 秒(00 00 00 00)后不采取任何操作(00 00 00 00)”

这是如何运作的?每次服务失败时,服务 Controller 都会增加失败计数 N 并采取 lpsaActions 指向的数组中指定的操作 N-1。在我们的例子中,第一次服务失败时,N 递增到 1, Controller 将执行由 0 索引的操作,这意味着在 60 秒后重新启动服务。第二次失败时,N 增加到 2 并采取操作 N-1 = 1,这意味着在 60 秒后重新启动服务。服务第三次失败时, Controller 执行数组中的最后一个操作,在我们的例子中是不采取任何操作。如果 N 大于 cActions,则服务 Controller 重复数组中的最后一个操作。在这种情况下,服务不再启动。

关于c# - 为服务的 FailureAction 设置什么 REG-BINARY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36462623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com