OnStart 完了前にクラッシュする Service プログラムのデバッグ
方法: Windows サービス アプリケーションをデバッグする | Microsoft Docs
Windows Server 2008 で動作してたサービスを Windows Server 2016に持ってきたら 開始する前にクラッシュしてしまうという現象が出てしまい、上記の方法でデバッグできなかったため、別の方法を使いました。
.NET Framework 製のプログラムだったので、 プログラム開始の頭に15秒のスリープを入れました。
static class Program { |
Sleep の次の行にブレークポイントを設定しました。
ちなみに、Windows のサービスは30秒して起動しないと強制終了されるという制約があります。
そこで、レジストリーキーの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
の ServicesPipeTimeout を追加し、150000 を設定しました。
これで、 150秒間 サービス開始を待ってくれるので 135秒 デバッグすることが可能になります。
プログラムをデバッグモードでコンパイルした後、サービスマネージャーから サービスを開始し、Sleepに入っている15秒の間に プロセスにアタッチすることでデバッグが可能になるわけです。
ちなみに、このレジストリキーは Windows 2000 以降で利用可能です。(SP2に実装されているのを確認)
Comments