スキップしてメイン コンテンツへ

 locked
登録されたサービス アプリケーションが開始に失敗する現象について RRS feed

  • 全般的な情報交換

  • こんにちは、Platform SDK (Windows SDK) サポートチームです。

    今回は、登録されたサービス アプリケーションが開始に失敗する現象についてご案内します。

     

    現象

    システムを起動すると、スタートアップの種類を「自動」として登録されたサービス アプリケーションが開始されず、以下のようなエラー イベントがシステム ログに記録される場合があります。

     

    ---------

    ソース:           Service Control Manager

    イベント ID:       7000

    タスクのカテゴリ:     なし

    レベル:           エラー

     

    説明:

    <サービス名> サービスを、次のエラーが原因で開始できませんでした:

    そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。

    ---------

     

    ---------

    ソース:           Service Control Manager

    イベント ID:       7009

    タスクのカテゴリ:     なし

    レベル:           エラー

     

    説明:

    <サービス名> サービスの接続を待機中にタイムアウト (30000 ミリ秒) になりました。

    ---------

     

    原因

    サービス コントロール マネージャは、サービス アプリケーションが起動を開始してからサービス コントロール マネージャとの通信を開始するまでに ServicesPipeTimeout エントリで指定された時間待機します。

    指定された時間内にサービス アプリケーションが応答できなかった場合は、イベント ID 7000 や ID 7009 のイベントログを記録して、サービス アプリケーションを停止させます。

    ServicesPipeTimeout エントリが設定されていない場合の既定のタイムアウト時間は 30 秒です。

     

    システム起動時に開始するサービスが多く登録されている環境やディスクのパフォーマンスが低い環境では、タイムアウトが発生しやすくなります。

    また、アプリケーションの実装に問題がない場合であっても、起動に必要となるモジュールが多いサービス アプリケーションほど影響を受けやすくなる傾向があります。

    特に、.NET Framework で作成されたアプリケーションでは、起動するために多数のモジュールの読み込みが必要となるため、本現象が発生し易くなります。

     

     

    回避方法

    この問題を回避するには、レジストリに変更を加え、サービス コントロール マネージャのデフォルトのタイムアウト値を大きくします。 この値を 60 秒に増やすには、次の手順を実行します。

     

    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。次に regedit と入力し、[OK] をクリックします。

     

    1. 次のレジストリ サブキーを見つけてクリックします。

     

           HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

     

    1. 右側のウィンドウで、ServicesPipeTimeout エントリを見つけます。

           注 : ServicesPipeTimeout エントリがない場合は、作成する必要があります。これを行うには、次の手順を実行します。

           1. [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。

           2. ServicesPipeTimeout と入力し、Enter キーを押します。

     

    1. [ServicesPipeTimeout] を右クリックし、[修正] をクリックします。

     

    1. [10 進] をクリックし、60000 と入力して [OK] をクリックします。

     

           この値は、サービスがタイムアウトするまでの時間をミリ秒単位で表します。

     

    1. コンピュータを再起動します。

     

     

     

    ※ Windows 10 Version 1903 以降の環境では、サービス アプリケーションごとに ServicesPipeTimeout を設定することが可能となりました。

       Windows 10 Version 1903 以降の環境をご利用で、システム全体のタイムアウトを変更したくない場合は、下記の手順を実行してください。

     

    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。次に regedit と入力し、[OK] をクリックします。

     

    1. 次のレジストリ サブキーを見つけてクリックします。

     

           HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<サービス>

            注 : <サービス> の部分は、設定を変更したい対象のサービスを選択します。

     

     

    1. 右側のウィンドウで、ServicesPipeTimeout エントリを見つけます。

     

           注 : ServicesPipeTimeout エントリがない場合は、作成する必要があります。これを行うには、次の手順を実行します。

           1. [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。

           2. ServicesPipeTimeout と入力し、Enter キーを押します。

     

    1. [ServicesPipeTimeout] を右クリックし、[修正] をクリックします。

     

    1. [10 進] をクリックし、60000 と入力して [OK] をクリックします。

     

           この値は、サービスがタイムアウトするまでの時間をミリ秒単位で表します。

     

    1. コンピュータを再起動します。

     


    2019年7月22日 10:01
    所有者