0

私の WPF アプリは、Log4Net を使用してメッセージをイベント ビューアーに記録します。これは、ほとんどのマシンでうまく機能しています。しかし、私のオフィスには問題のあるマシンが 2 台あります。1 つは 2 GB の RAM を搭載した物理 Windows 7 マシンで、もう 1 つは XP を実行する仮想マシンで、これも 2 GB の RAM を搭載しています。

問題は、ユーザーが管理者権限を持つアカウントを使用してログインしている場合でも、アプリケーション用にセットアップしたカスタム イベント ログをシステムが作成できないことです。これにより、プログラムが停止します。

すべての Log 呼び出しにエラー処理を追加できますが、そうすべきではないと感じています。メッセージは、既に発生した別のエラーのキャッチ ハンドラーに記録されています。ログに記録できない場合、エラー情報をどうするのでしょうか?

いずれにせよ、昨日 XP 仮想マシンでカスタム イベント ログを作成しようとしましたが、まだ作成されませんでした。これら 2 台のマシンで作成されたカスタム イベント ログを取得するには、具体的に何をする必要がありますか?

トニー

4

2 に答える 2

1

問題はロギング コードにまったくないことが判明しました。私のプログラムでは、GUI に WPF を使用しています。起動シーケンスは、UI スレッドで最小限の作業を行うため、できるだけ早く UI を表示できます。

残りの初期化はバックグラウンド スレッドで行われます。エラーが発生していることはわかっていましたが、イベント ビューアーのログの一覧にカスタム エラー ログが見つかりませんでした。私のコードがデータベース内に必要なデータを見つけられず、エラーを報告しようとしていたことが判明しました。これは、最初にエラーをログに記録してから、カスタムMessageBoxダイアログを表示するという 2 段階のプロセスです。XamlParseExceptionプログラムがこのダイアログを表示しようとしたときに、エラーが発生しました。

簡単に言うと、プログラムをクラッシュさせていた問題はXamlParseException. MessageBox's Showこれは、UI スレッドではなくバックグラウンド スレッドでカスタム メソッドを呼び出していたため、スローされました。イベント ビューアーでカスタム イベント ソースが見つからなかったため、エラーを見つけることができなかったため、エラーは権限の問題であると想定しました。

ところで、ある時点でイベント ログを手動で作成しようとしましたが、昨日、レジストリを確認したところ、カスタム イベント ソースのエントリが見つかりました。

同じ問題を抱えている別のマシンがここにあります。私はそれが同じ正確な問題だと確信しています。エラー処理にロジックを追加して、カスタムMessageBoxが常に UI スレッドで呼び出されるようにして、同じ問題が再発した場合にプログラムがそのように爆発しないようにします。

于 2012-06-15T13:22:00.883 に答える
0

XPマシンでイベントログを作成しようとした方法を確認する必要があります...

一般的に、これを読む必要があります: http://msdn.microsoft.com/en-us/library/49dwckkz(v=vs.80).aspx

特に、カスタム イベント ログをいつ作成するかについて説明しているメモ:

一般に、アプリケーションのインストール中に新しいイベント ソースを作成します。これにより、オペレーティング システムが登録済みのイベント ソースのリストとその構成を更新する時間ができます。オペレーティング システムがイベント ソースのリストを更新していない場合、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します. インストール中にソースを作成できない場合は、最初の書き込み操作よりもかなり前に、おそらくアプリケーションの初期化中にソースを作成してみてください. これを選択した場合アプローチするには、初期化コードがコンピューターの管理者権限で実行されていることを確認してください。これらの権限は、新しいイベント ソースを作成するために必要です。」

最初のロギング イベントの前にカスタム ログを作成して、それを使用してみてください。

于 2012-06-14T19:24:16.977 に答える