2

Windows Server 2003 R2 マシンに一連の .net 2.0 Windows サービスがインストールされています。それらはローカル システム アカウントとして開始するように構成されており、開始モードは自動です。すべてのサービスがエラー 1053「サービスが開始または制御要求にタイムリーに応答しませんでした」で失敗します。

サービスの 1 つにログを挿入し、問題がコードの外にあることを調査しました。1 行のコードも実行されませんでした。

マシンの .net コードのアクセス許可に問題があるようです。ただし、問題はクライアント マシンでのみ再現されます (同じ症状を持つ 2 つの異なるクライアント)。開発者およびテスター環境では、再現できません。

再現するシステム: OS: Windows Server 2003 R2 SP2 32bit クリーン インストール + 製品前提条件: SQL Server 2005 Express SP2、.NET Framework 2 SP2 + 弊社製品

それは何ですか、何か提案はありますか?

2011 年 7 月 4 日からの更新:

クライアント マシンからの ProcessMonitor ログを含むファイル: http://dl.dropbox.com/u/8982352/Logfile.zip サービス プロセス名: ParsecServiceHost.exe

4

3 に答える 3

1

最後に、答えを報告すると、マイクロソフトのサポートが次のことを得るのに役立ちました。

この問題は、Authenticode 署名を持つ .NET Framework 2.0 マネージ アセンブリの読み込みに通常より時間がかかるために発生します。Authenticode 署名を持つ .NET Framework 2.0 マネージ アセンブリが読み込まれると、署名は常に検証されます。

さらに、.NET Framework 2.0 マネージ アセンブリは、他のさまざまな設定が原因で、読み込みに通常よりも時間がかかる場合があります。たとえば、ネットワーク構成が原因で、.NET Framework 2.0 マネージ アセンブリの読み込みに通常より時間がかかる場合があります。

問題を説明し、.NET Framework 2.0 のホットフィックスを提供する Microsoft KB を次に示します。ただし、このホットフィックスは長いロード時間の問題を修正しませんが、app.config で generatePublisherEvidence パラメーターを設定することにより、.NET で署名検証を無効にする機能を単純に無効にする機能を追加します:) ! 注: .NET Framework SP2 を使用している場合、修正プログラムは必要ありません。app.config で generatePublisherEvidence パラメーターを設定するだけです。

http://support.microsoft.com/kb/936707 - 修正: Authenticode 署名を持つ .NET Framework 2.0 マネージ アプリケーションの起動に通常より時間がかかる。

問題を解決するには、この構成設定を使用して、.NET Framework 2.0 マネージ アプリケーションで署名の検証を無効にします。この構成設定は、アプリケーション構成ファイルで使用できます。これを行うには、.NET Framework 2.0 マネージ アプリケーションの .exe.config ファイルに次のコードを追加します。

<configuration>
    <runtime>
            <generatePublisherEvidence enabled="false"/>
        </runtime>
</configuration>

アプリケーションが IIS でホストされている場合は、次のいずれかを変更します。 C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine .config

注: x64 マシンでは、次のいずれかも変更する必要があります。 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\ machine.config

于 2011-09-13T14:04:03.950 に答える
0

OnStart()サービスのコンストラクターで、サービスのメソッドで使用されるリソースを宣言しないでください。基本的に、コンストラクターは初めて実行され、使用する値を保持しますが、リソースが解放されOnStart()た後OnStop()、同じものを再度使用することはできません。すべてのインスタンス化コードをコンストラクターからに移動するだけで、OnStart()実行されます。

クイック リファレンス用のMSDNからのリンクは次のとおりです。

これには、もう1つの問題がある可能性があります。デバッグビルドを使用している可能性があります。サービスはデバッグ モードでは実行されないため、サービスを実行するにはリリース ビルドを使用する必要があります。

于 2011-06-24T06:05:17.620 に答える
0

win 7 / vistaでサービスが問題なく実行される場合、問題はコード、たとえばOnStart()メソッドにあると思います。通常、このメソッドでは IO 操作は許可されていないため、このメソッドでスレッドを使用する場合は注意してください。

于 2011-06-08T13:06:15.300 に答える