web-dev-qa-db-ja.com

Windowsサービスの開始がエラー1053で失敗する

開始に失敗しているWindowsサービスがあり、「エラー1053:サービスが開始要求または制御要求にタイムリーに応答しませんでした」というエラーが表示されます。

デバッガーでサービスを実行すると正常に動作し、リモートマシンでservice .exeをダブルクリックすると、コンソールウィンドウがポップアップし、問題なく実行を継続します-プログラムがすべてを処理していることを示すログメッセージも表示されますあるべき姿。

以前はサービスは正常に実行されていましたが、個人的には、プログラムに加えられた最新の変更を使用してサービスを展開しようとするのはこれが初めてです。私はこれらの変更を評価しましたが、特にサービスとして開始されていないときはすべて正常に動作するため、これらの変更がこの問題を引き起こす可能性があることを理解できません。

サービス実装のStartRoutine()メソッドは空であるため、「タイムリーに」戻る必要があります。

コンピューターでイベントログを確認しましたが、30秒の必要な時間枠内にサービスから返信がなかった以外の追加情報は提供されません。

それは私のマシン上で、ダブルクリックされた実行可能ファイルとして機能するので、サービスとして失敗する理由をどのように理解するのですか?

ああ、それは.NET 2.0なので、この症状を示した1.1フレームワークのバグの影響を受けないはずです( http://support.Microsoft.com/kb/839174

ボックスは、SP2を実行しているWindows Server 2003R2マシンです。

12
Matt

いくつかの可能性があり、問題を示しているマシンでスタックトレースを取得すると役立つ場合があります。これを行うにはいくつかの方法がありますが、重要なのは、これがコードのどこで失敗しているかを確認する必要があるということです。

これは リモートデバッグ で実行できますが、簡単なことは、イベントロガーにログを記録するか、イベントロガーがある場合はファイルログを記録することです。文字通り、コードの一部全体に「WriteLine( "At class :: function()")」を配置して、そこに到達したかどうかを確認します。

これにより、少なくとも正しい方向を見ることができます(最終的にはコードです)。

更新

WinDbgを使用した起動時の問題のトラブルシューティングの詳細については、Microsoftの Windowsサービスのデバッグ方法 の記事を参照してください。

これ 関連する質問 詳細.NETで記述されたサービスをデバッグするための優れた方法。

4
Scott Saad

これは誤解を招くエラーです。おそらく未処理の例外です。

OnStart()ハンドラーを空にしてから、コンストラクターでこれを試してください...

    public MainService()
    {
        InitializeComponent();

        try
        {
            // All your initialization code goes here.

            // For instance, my exception was caused by the lack of registry permissions
            ;
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
        }
    }

次に、システムのEventLogでアプリケーションエラーを確認します。

5
kervin

StartRoutineが空の場合は、おそらく別の場所で開始しています。

IIRCでは、ワーカースレッドを起動してから、StartRoutineから戻る必要があります。

1
leppie

このエラーにつながる可能性のある問題の1つは、展開する必要のあるWindowsサービスが何らかのエラーで構成されている場合です。つまり、単純な認証エラーか、私の場合のように、存在しないログ用のフォルダーとファイルを参照した場合です。しかし、それらのファイルとフォルダーの正しいパスが提供されたとき、それは私の問題を解決しました。

1
shanky

私はスコットに同意します。何が起こっているのかを知る最も簡単な方法は、スタートアップコードにいくつかのトレースを入れることです(おそらく、スタートアップコードには到達しません)。

これで問題が解決しない場合は、ここにコードを投稿して、他の人が確認できるようにすることができます。

1
Igor Brejc

おそらく依存関係がないので、これを試してください:
-サービスの登録を解除します
-再登録

登録に失敗した場合は、モジュールが不足していることを意味します。

1
lsalamon

私の場合、Windowsサービスをインストールしていたサーバーに正しい.NETFrameworkがインストールされていませんでした。

0
LoveFortyDown

私はその問題を抱えていました、そして私の問題の原因は設定ファイルでした。私はそれをメモ帳で編集し、メモ帳に1つの特殊文字を追加しました。これにより、構成ファイルが台無しになったためにサービスが正しく実行されなくなりました。 notepadd ++でその特殊文字を確認し、それを削除した後、サービスは以前と同じように正常に実行を開始しました。

0
Dragoslav

私はこの特定の主題に関するすべての投稿に目を通しましたが、どの回答も問題を解決しなかったので、これが他の誰かを助ける場合に備えて、この回答を追加します。確かに、これは新しいサービスにのみ適用され、この特定のケースには適用されません。

私はファイルリスニングサービスを書いていました。コンソールアプリとして、それは完璧に機能しました。サービスとして実行すると、上記と同じエラーが発生しました。私が知らなかったのは(そしてサービスに関するMSDNの記事の多くは都合よく省略されている)、ServiceBase.Run(YourClassName());内からクラスを実行する必要があるということです。それ以外の場合、アプリは実行されてすぐに終了します。終了したため、エラーや例外が発生していなくても、上記のエラーが発生します。これに関する記事へのリンクは次のとおりです。実際には、アプリをデュアルユースに設定する方法について説明しています-コンソールアプリとサービス: コンボコマンドライン/ Windowsサービスアプリを作成する

0
hughf