1

C#で開発され、.net4.0でビルドされたプログラムがあります。このプログラムは、バーコードリーダーから(comポートを介して)バーコードを読み取り、WCFを介してバーコードをバックエンドサーバーに送信するWindowsクライアントです。顧客はクライアントOSにスクリプトを持っており、OSを再起動して、毎日プログラムを自動的に起動します。OSはWindowsXPEmbeddedです。

問題は、システムを再起動すると、プログラムを起動できず、このエラーレポートをMicrosoftに送信するかどうかを尋ねるエラーメッセージボックスがポップアップ表示されることです。最も奇妙なことは、私の同僚がプログラムフォルダをコピーして、元のフォルダと同じフォルダに「Copy of ....」として貼り付けると、「Copyof...」の下のexeファイルを問題なく実行できることです。しかし、元のものはまだできません。

私の推測では、システムが強制的に再起動されている間に、プログラムがログやその他のレコードファイルを書き込んでいた可能性があります。そして、ファイルは読み取り/書き込みロックを解放されません。

エラーのスクリーンショットをflickrにアップロードしました。訪問するには、ここをクリックしてください。

4

3 に答える 3

1

実際の例外が何であるかを知らなくても、推測することしかできません。

アプリケーションでスローされている例外をキャッチする必要があります。

ベストプラクティスは、コードをtry/catch句にカプセル化することです。

それでもアプリケーションがクラッシュする場合は、イベントハンドラーを AppDomain.UnhandledExceptionまたはApplication.UnhandledExceptionにアタッチして、受信した例外をログに記録できます。

例外スタックトレース全体を出力して、どこからスローされているかを確認できるようにしてください。

例外が発生した後、原因がわからない場合は、ここでその具体的な詳細について別の質問をしてください。例:「WindowsXP Embeddedで起動した後にBar()を呼び出すと、FooExceptionがスローされます」

于 2012-05-17T04:37:47.420 に答える
0

投稿した画像 IMG_1348 を参照すると、フォーム コンストラクターでエラーがスローされます。

追加したコードまたは InitializeComponent コードがスローしているようです。

XPe を使用しているため、この問題をデバッグするためのオプションがいくつかあります。

  1. さまざまなコンストラクターの前後にメッセージ ボックス ステートメントを追加して、初期化の進行状況を表示します。前後ガード。

    public Form1() { MessageBox.Show("Before InitializeComponent"); InitializeComponent(); MessageBox.Show("After InitializeComponent");

    //MessageBox.Show("Before Other"); //その他の初期化コード //MessageBox.Show("After Other"); }

  2. リモート デバッガーの使用を試みます。これが XPe で機能するかどうかはわかりませんが、機能する場合は、コードがコンストラクターでスローされているため、デバッガーが接続されるまで待機するコードを追加する必要があります。

    public Form1() { while (!System.Diagnostics.Debugger.IsAttached){ System.Threading.Thread.Sleep(0); } InitializeComponent(); //その他の初期化コード }

于 2012-05-17T05:03:23.540 に答える
0

再起動後、一部のデバイス ドライバーまたは一部のハードウェアがリセットされないことがあります。マシンの電源を入れ直す (電源をオフにしてからオンに戻す) か、デバイス ドライバーやハードウェアを強制的にリセットするコマンドを検出する必要があります。

于 2012-05-17T03:50:55.567 に答える