0

サードパーティのライブラリ (Abbyy's Finereader 8.1) を使用していくつかの作業を行ってから終了する、かなり単純な C# プログラム (UI なし、コマンド ラインのみ) があります。

十分にシンプルで、非常にうまく機能します。ただし、最近、プログラムから次のエラーが発生し始めました。

アプリケーション エラー : "0x2c0de46b" の命令が "0x0732aa84" のメモリを参照しました。

少し調べてみると、これは C# コードの最後で発生していることがわかります。基本的に、最後の 2 行は次のとおりです。

  Console.WriteLine(message);
  return statusCode;

最終的なコンソール メッセージが書き込まれ、プログラムからの出力は問題ありません。実際、このエラーが原因でプログラムが完全に終了しないという事実がなければ、回避することができました。

このプログラムをそれぞれ 2 台のマシンで呼び出す 2 つのスクリプトを実行しています。これは (私が知る限り) ランダムに発生しますが、通常は (4 つのスクリプト) の少なくとも 1 つが毎日ヒットします。おそらく同時実行で何らかの奇妙なことが起こっているのではないかと思いましたが、テストによりそれは解消されました。

私はアイデアを使い果たしたので、考えられる原因についての考えは大歓迎です。

また、これが発生したときにプログラムを終了させる方法を誰かが知っていれば、それは役に立ちます。

4

2 に答える 2

1

ええと...トラブルシューティングでは、何が変わったのかを尋ねる必要がありますが、あなたはそれについて自分で考えたと思います. 使用している .NET フレームワークのバージョンは何ですか? この問題が発生する OS は何ですか?

この例外は、サードパーティのライブラリが行う何らかのクリーンアップから来ていると思います。彼らのサポートに連絡しましたか?ライブラリを明示的にアンロードしてみて、それでもエラーが発生するかどうかを確認できますか?

または...未処理の例外のハンドラーを追加しようとしましたか? 試してみる価値はあるかもしれません...

public static void Main()   
{   
    AppDomain.CurrentDomain.UnhandledException +=   
        new UnhandledExceptionEventHandler(   
            OnUnhandledException);

    //some code here....
}   

/// <summary>
/// Occurs when you have an unhandled exception
/// </summary>
public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)   
{ 
    //here's how you get the exception  
    Exception exception = (Exception)e.ExceptionObject;  

    //bail out in a tidy way and perform your logging
}

( DoctaJonezによるコード例)

(まだ)明確な答えがないように見えるので、そこにいくつかのものを投げるだけです。

于 2009-12-29T12:42:50.410 に答える
1

「アプリケーション エラー: "0x2c0de46b" の命令が "0x0732aa84" のメモリを参照しました。」

このエラーは、コードのどこかでメモリが破損していることを意味します。完全なコードがなければ、これ以上は言えません。このエラーの場合、例外が発生する場所は重要ではありません。コード、特にライブラリを呼び出すコードを調べてみてください。

于 2009-12-16T13:51:29.967 に答える