私は、この手法を使用する多数の自己更新サービスを作成しました。復旧オプションに依存することは理想的ではないことがわかりました。システム管理者は、サービスが自分のマシンで爆撃されていると感じることがよくあります (イベント ログに、予期しないサービスの停止によりサービスの復旧が行われていることを書き込みます)。
私の場合、明らかにハックですが効果的だったのは、サービスのインストール中に作成されたアカウントで、特別に細工された実行可能ファイルを起動することでした。アカウントはログオン権限を拒否され、特定のサービスのみを制御できます (icacals または同等のものを使用してサービス制御権限を付与します)。OnCustomCommand
実行可能ファイルが起動され、定義済みのサービス コマンドを使用してサービスと通信します。このコマンドは、サービスが更新されたこと、実行中の処理を終了する必要があること、およびできるだけ早くシャットダウンする必要があることをサービスに通知します。実行可能ファイルは一定時間待機し、サービスが停止すると、バイナリを移動し、他の多くのカスタム手順を実行してから、サービスのバックアップを開始して終了します。
これを行うためのよりクリーンな方法があると確信していますが、数時間探した後、よりクリーンなものを思い付くことができなかったので、これが私たちの場合にうまくいくと判断しました. 管理者が実行可能ファイルを実行するユーザーアカウントをいじることによる時折のアクセス許可の問題を除いて、多数のコンピューターに導入されてから何年もの間、これに関して問題はありませんでした。