サービスは「停止不可」としてマークできます。
C / C ++では、SetServiceStatus
SERVICE_ACCEPT_STOP
を呼び出すときにフラグを指定します(詳細については、 SERVICE_STATUSを参照してください)。.NETの場合は、ServiceBase.CanStopをに設定し
false
ます。
しかし、これは良い習慣ですか?これは、管理者権限を持つユーザーでさえ、そのようなサービスをクリーンな方法で停止できないことを意味します。(それでも強制終了することは可能ですが、これにより適切なクリーンアップが妨げられます。同じプロセスで実行されている他のサービスがある場合は、それらも強制終了されます。)
私の特定のケースでは、私は科学機器を制御するサービスを持っています。取得したデータが失われるのを防ぐために、機器からデータを取得している間はサービスを停止できないようにすることが提案されています。私はそれを追加する必要があります:
- 管理者以外のユーザーにサービスを開始/停止する権利を付与します
- このサービスを開始/停止するためのUIを提供するプログラムがあります。このプログラムは、ユーザーが取得中にサービスを停止しようとすると警告を発します。
SC.EXE
ただし、もちろん、「サービス」スナップインを使用して停止することもできます。この場合、警告はありません。
Microsoft(または他の誰か)はガイダンスを提供しますか?