2

背景:あるクライアントから、サード パーティが開発した Windows サービスを提供されました。ただし、サービスを開始するとタイムアウトし、1053「サービスが応答しませんでした...タイムリーなファッション」エラーが発生します。

アセンブリをリフレクトして、start メソッドで実行中のコードを取得しましたが、一見したところ、返されるように見えます。

実際の質問:このサービスが 1053 エラーを引き起こしている理由を誰か説明できますか?

(ログ ファイルを確認すると、タイマーが初期化されており、サービスが終了する前に複数回起動していることが確認されています。)

private void InitTimers()
{
    if (this._config.RunMode == RunModes.Continuous)
    {
        this.srvcTimer.Interval = Math.Max(this._config.Interval.TotalSeconds, 1.0) * 1000.0;
    }
    else
    {
        this.srvcTimer.Interval = 60000.0;
    }
    this.srvcTimer.AutoReset = true;
    this.srvcTimer.Enabled = true;
}
4

2 に答える 2

3

サービス コンストラクターは、サービスが正常に開始されるように "タイムリーに" 戻る必要があります。これは、コンストラクターで潜在的に高価な操作を開始することはできず、別のスレッドに委譲する必要があることを意味します。

通常、サービスの開発時にはローカル データベースへの接続に問題がないことに気付くかもしれませんが、サービスを展開してインターネット経由で接続する必要があると、失敗することがわかります。

コンストラクター内の正確なコードを見ないと断言できませんが、それをスレッドに移動すると、サービスが正常に開始されるはずです。明らかにこれは、サービスが実際に正しく開始されたことを確認し、スレッドからメイン プログラムにエラーを報告する何らかの方法が必要であることを意味します。

于 2013-05-06T16:56:13.637 に答える
-1

これは、サービス ログを既に定義しており、それをコードで変更するためです。

私は最近これに遭遇しました。解決策は次のサービス ログ レジストリを削除することです。

HKLM/System/ControlSet001/services/eventlog/<your service name>

よくわからない場合は、最初にレジストリをバックアップしてください。

于 2014-12-23T05:46:05.697 に答える