我正在使用
到目前为止,一切都很顺利,非常容易入手,我很喜欢它。
我已经编写了一些自动更新功能,并希望服务在完成更新后重新启动自己。
我尝试使用
更好/更简单的方法似乎是使用
我做了一些调查,看起来它们是通过在
在golang/sys/blob/master/windows/svc/mgr/config.go中的
而且,
我很难弄清楚如何使用Go构建和传递该结构体-有人有什么见解吗?
golang.org/x/sys/windows/svc
包编写Go语言的Windows服务。到目前为止,一切都很顺利,非常容易入手,我很喜欢它。
我已经编写了一些自动更新功能,并希望服务在完成更新后重新启动自己。
我尝试使用
SCM
生成一个重新启动服务的进程,但是它记录了一个错误消息,似乎与尝试在Local System下控制服务有关。The service process could not connect to the service controller.
更好/更简单的方法似乎是使用
os.Exit(1)
,并将服务的故障操作
设置为失败时重启
,这个方法非常有效!但唯一的问题是,在Go中没有功能可以以编程方式配置这些选项。我做了一些调查,看起来它们是通过在
advapi32.dll
中传递一个结构体给ChangeServiceConfig2
来配置的-参见如何创建在崩溃时重新启动的服务。在golang/sys/blob/master/windows/svc/mgr/config.go中的
func updateDescription(handle windows.Handle, desc string) error
函数中,代码已经调用了windows.ChangeServiceConfig2
,这是一个链接到DLL调用的链接。而且,
SERVICE_FAILURE_ACTIONS
结构的Microsoft文档在这里。我很难弄清楚如何使用Go构建和传递该结构体-有人有什么见解吗?