3

私のプロジェクトの 1 つで、イベント ログ "Microsoft-Exchange-ManagedAvailability/Monitoring" がマシン上に存在するかどうかを確認する必要があります (イベント ソースは ManagedAvailability です)。

使った

EventLog.Exists("Microsoft-Exchange-ManagedAvailability/Monitoring")

EventLog.SourceExists("ManagedAvailability")

どちらも false を返しますが、イベント ログは存在します。"applications and services logs"/Microsoft/ の下にあります。スクリーン ショットを参照してください。

では、このログが存在するかどうかを確認するにはどうすればよいでしょうか。

ありがとう

ここに画像の説明を入力

4

3 に答える 3

1

イベント ソースにアクセスするための適切な権限を持っていますか。たとえば、イベント ソースを確認するには管理者権限が必要な場合があります。

MSDNから

このメソッドはレジストリにアクセスするため、ローカル コンピュータに対する適切なレジストリ アクセス許可が必要です。それ以外の場合、クエリは false を返します。

編集1

次のコードを使用して、マシンにリストされているイベント ログ名を確認できますか。リストを取得したら、Event logName が存在するかどうかを確認します。存在する場合は、コードで同じ名前を event logName に渡します。

また、情報が必要なイベント ログ (右クリック) -> [プロパティ] -> [フル ネーム] に移動することもできます。この名前は、Exists メソッドで使用する必要があります。

System.Diagnostics.Eventing.Reader.EventLogSession.GlobalSession.GetLogNames()
于 2016-01-04T22:36:01.420 に答える
1

ユーザー アカウント制御 (UAC) を備えたマシンでこれを実行していますか? EventLogの MSDN ページを確認したところ、次のヒントが見つかりました。

このメソッドはレジストリにアクセスするため、ローカル コンピュータに対する適切なレジストリ アクセス許可が必要です。それ以外の場合、クエリは false を返します。

イベント ログがレジストリと正確にどのように関連しているかはわかりませんが、レジストリで他の作業を行いました。同じ問題であれば、実行権限レベルを上げる必要があります。これを行うには、アプリケーション マニフェスト ファイルをソリューションに追加し、設定する必要がありrequestedExecutionLevel level="requireAdministrator"ます。つまり、UAC を備えたマシンでアプリケーションを実行するたびに、「よろしいですか?」と尋ねられます。また、使用するマニフェストがプロジェクト プロパティで指定されていることを確認する必要もあります。

私が陥ったもう 1 つの落とし穴は、Visual Studio を使用してデバッグしているときに、マニフェストで指定されたものではなく、VS 実行レベルで実行されることでした (こちらを参照)。最も簡単な解決策は、ショートカット プロパティで VS を管理者として実行するように設定することです。

于 2016-01-04T22:36:43.137 に答える