栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何配置用Go编写的Windows服务的失败操作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何配置用Go编写的Windows服务的失败操作?

在从这里获得一些指导之后,再通读现有Go WindowsService界面的源代码,我提出了自己的答案,我将在下面尝试记录。

对于类型参考使用Windows DLL的工作时,MSDN文档在这里。

我的代码如下所示:

import (    "unsafe"    "golang.org/x/sys/windows")const (    SC_ACTION_NONE= 0    SC_ACTION_RESTART        = 1    SC_ACTION_REBOOT         = 2    SC_ACTION_RUN_COMMAND    = 3    SERVICE_CONFIG_FAILURE_ACTIONS      = 2)type SERVICE_FAILURE_ACTIONS struct {    ResetPeriod     uint32    RebootMsg       *uint16    Command         *uint16    ActionsCount    uint32    Actions         uintptr}type SC_ACTION struct {    Type uint32    Delayuint32}func setServiceFailureActions(handle windows.Handle) error {    t := []SC_ACTION{        { Type: SC_ACTION_RESTART, Delay: uint32(1000) },        { Type: SC_ACTION_RESTART, Delay: uint32(10000) },        { Type: SC_ACTION_RESTART, Delay: uint32(60000) },    }    m := SERVICE_FAILURE_ACTIONS{ ResetPeriod: uint32(60), ActionsCount: uint32(3), Actions: uintptr(unsafe.Pointer(&t[0])) }    return windows.ChangeServiceConfig2(handle, SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&m)))}

在我的基本示例中,您需要传递服务句柄,然后将失败操作设置为硬编码默认值:

  1. 1秒后第一次重新启动。
  2. 10秒后重新启动第二次。
  3. 重新启动第三次以及60秒后的任何后续时间。
  4. 60秒后重置故障计数器。

我刚刚测试过,看来工作正常。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568963.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号