サービスが正しくコーディングされている場合、シャットダウンとプレシャットダウンの両方を受け入れることはできません。ドキュメントには、これが明示的に記載されています。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683241(v=vs.85).aspxから:
参照SERVICE_CONTROL_PRESHUTDOWN
:
この通知を処理するサービスは、サービスが停止するか、SERVICE_PRESHUTDOWN_INFO で指定されたプレシャットダウン タイムアウト間隔が経過するまで、システムのシャットダウンをブロックします。
同じページで、セクションに関するセクションに次の情報SERVICE_CONTROL_SHUTDOWN
が追加されています。
SERVICE_CONTROL_PRESHUTDOWN 通知に登録するサービスは、既に停止しているため、この通知を受信できないことに注意してください。
したがって、正しい方法は、必要に応じてまたはのdwControlsAccepted
いずれかを含めるように を設定することですが、同時に両方を含めることはできません。SERVICE_ACCEPT_SHUTDOWN
SERVICE_ACCEPT_PRESHUTDOWN
ただし、より多くのコントロールを受け入れる可能性があることに注意してください。後者がないと、サービスを停止できず (ソフトウェアをアンインストールするなど)、プロセスを強制的に終了 (つまりkill )する必要があるため、常に少なくとも を許可する必要がSERVICE_CONTROL_INTERROGATE
あり、ほぼ確実に許可する必要があります。SERVICE_CONTROL_STOP