4

golang.org/x/sys/windows/svcパッケージを使用して Go で Windows サービスを作成しています。

これまでのところ、すべてうまく機能しており、とても簡単に使い始めることができます。気に入っています。

自動更新機能をいくつか書きましたが、更新が完了したときにサービスを再起動したいと考えています。

を使用してサービスを再起動するプロセスを生成しようとしましたSCMが、ローカル システムとして実行中にサービスを制御しようとしたことに関係していると思われるエラー メッセージがログに記録されます。

The service process could not connect to the service controller. 

より良い/より簡単な方法os.Exit(1)は、サービスをFailure Actionsに設定することRestart on Failureです。これは見事に機能します!

唯一の問題は、Go を使用してプログラムでこれらのオプションを構成する機能がないように見えることです。

私はいくつかの掘り下げを行いましたが、構造体をChangeServiceConfig2in に渡すことによって構成されているようですadvapi32.dll-クラッシュ時に再起動するサービスを作成する方法

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を使用してその構造体を構築して渡す方法を理解するのに苦労しています - 誰か洞察を持っていますか?

4

1 に答える 1