OnStart 完了前にクラッシュする Service プログラムのデバッグ

方法: Windows サービス アプリケーションをデバッグする | Microsoft Docs

Windows Server 2008 で動作してたサービスを Windows Server 2016に持ってきたら 開始する前にクラッシュしてしまうという現象が出てしまい、上記の方法でデバッグできなかったため、別の方法を使いました。

.NET Framework 製のプログラムだったので、 プログラム開始の頭に15秒のスリープを入れました。
static class Program
{

    
static void Main()
    
{
    
    
System.Threading.Thread.Sleep(15000);
                      :

Sleep の次の行にブレークポイントを設定しました。

ちなみに、Windows のサービスは30秒して起動しないと強制終了されるという制約があります。

そこで、レジストリーキーの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
の ServicesPipeTimeout を追加し、150000 を設定しました。
これで、 150秒間 サービス開始を待ってくれるので 135秒 デバッグすることが可能になります。

プログラムをデバッグモードでコンパイルした後、サービスマネージャーから サービスを開始し、Sleepに入っている15秒の間に プロセスにアタッチすることでデバッグが可能になるわけです。

ちなみに、このレジストリキーは Windows 2000 以降で利用可能です。(SP2に実装されているのを確認)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です