1

私は数か月前に開発した Windows サービス アプリを持っていますが、遠く離れた Windows Server 2012 でも問題なく動作していました。しかし、マイナー アップデートの後、サーバーに再インストールする必要がありました。このサーバー、エラーが発生します。完全なコマンド ライン ダイアログは次のとおりです。

アセンブリ 'c:\Program Files\My Company\MyServiceApp\MyServiceApp.exe' をインストールしています。影響を受けるパラメータは次のとおりです。

logtoconsole =
assemblypath = c:\Program Files\My Company\MyServiceApp\MyServiceApp.exe
ログファイル = c:\Program Files\My Company\MyServiceApp\MyServiceApp.InstallLog

サービス SendHistoryService をインストールしています...
サービス SendHistoryService が正常にインストールされました。
EventLog ソース SendHistoryService をログ アプリケーションに作成しています...
System.ServiceProcess.ServiceInstaller の OnAfterInstall イベント ハンドラで例外が発生しました。
System.InvalidOperationException: コンピューター '.' でサービス SendHistoryService を開始できません。
内部例外 System.ComponentModel.Win32Exception がスローされ、次のエラー メッセージが表示されました: サービスは開始要求または制御要求にタイムリーに応答しませんでした。
アセンブリ 'c:\Program Files\My Company\MyServiceApp\MyServiceApp.exe' をロールバックしています。
影響を受けるパラメータは次のとおりです。

logtoconsole =
assemblypath = c:\Program Files\My Company\MyServiceApp\MyServiceApp.exe
ログファイル = c:\Program Files\My Company\MyServiceApp\MyServiceApp.InstallLog

ソース SendHistoryService のイベント ログを以前の状態に復元しています。
サービス SendHistoryService はシステムから削除されています...
サービス SendHistoryService はシステムから正常に削除されました。

サービス インストーラーは、私のローカル マシン (W8.1) でも完全に動作することに注意してください。インストーラーには、実際には "SendHistoryService" と "GeneratorService" という 2 つの個別のサービスが含まれていますが、ご覧のとおり、インストーラーは最初のインストールを試行中に失敗します。関連性がある場合、プロセスは次の行で約 30 秒間スタックします。

Creating EventLog source SendHistoryService in log Application...

もちろん、私が最初にチェックしたのは OnAfterInstall イベント ハンドラですが、そこでは何も問題が発生していないようです。

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller() { InitializeComponent(); }

    private void ServiceProcessInstaller_AfterInstall(object sender, InstallEventArgs e) { }

    private void GeneratorServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
    {
        using (var sc = new ServiceController(GeneratorServiceInstaller.ServiceName))
            sc.Start();
    }

    private void SendHistoryServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
    {
        using (var sc = new ServiceController(SendHistoryServiceInstaller.ServiceName))
            sc.Start();
    }
}

ここで何が起こっているのか本当に理解できません。どんな手掛かり ?

編集: ProjectInstaller クラスでサービスを開始する行にコメントを付けてみました。これでインストールは正常に実行されますが、サービスを開始しようとすると失敗し、次のエラー メッセージが表示されます。

Windows は、ローカル コンピューターで SendHistoryService サービスを開始できませんでした。

エラー 1053: サービスは開始要求または制御要求にタイムリーに応答しませんでした。

4

1 に答える 1

1

最後に、私の問題は接続文字列の問題が原因でした。エラー メッセージができるだけ明示的でないため、見つけるのに時間がかかりました。ここで驚くべきことは、サービスが例外をスローする代わりにタイムアウトに達したことです。オンライン検索中に読んだことによると、このエラー メッセージにはさまざまな原因が考えられます。

于 2015-12-09T16:49:35.657 に答える