0

20 秒ごとに起動してレポート キューを確認し、レポート キューの内容に基づいてプログラムを実行する Windows サービスがあります。レポート プログラムを単独で実行すると、問題なく動作します。サービスから実行すると、イベント ログに次のエラーが表示されます...

Application: cqrAbandonedCallsRpt.exe 
    Framework Version: v4.0.30319 Description: 
        The process was terminated due to an unhandled exception. 
            Exception Info: System.TypeInitializationException Stack: at 
               CallQueueReport.cqrAbandonedCallsRpt.Main(System.String[]) 

ログに追加情報はありません。main 関数のすべてのコードをコメントアウトしましたが、それでもエラーが発生します。また、サービスは管理者アカウントで実行されています。

何が問題を引き起こしているのでしょうか?

4

1 に答える 1

2

問題は実際にはMainメソッドではなく、を含むクラスの型初期化子にあるようMainです。おそらく、クラス内でインラインで初期化される静的フィールドでしょうか? このようなもの?:

class Program
{
    // this...
    static string someValue = SomeObject.FetchSomeValue();

    static void Main(string[] args)
    {
        // no code here
    }
}

TypeInitializationExceptionあなたが見ているのは、発生している実際のエラーを(おそらく内部例外として)覆い隠している可能性があります。の最初のステップとして、クラスからすべてのインライン初期化コードを削除し、値を初期化してみてくださいMain()。その後、初期化コードを でラップし、try/catch発生している実際のエラーをログに記録できるため、根本的な原因に有意義に対処できます。

(私の経験でTypeInitializationExceptionは、 は短い言い方ですThereIsTooMuchUnvalidatedLogicAtTheClassLevelAndYouShouldPutItInAMethodException。)

于 2013-11-12T01:03:30.580 に答える