9

アプリケーション開発者のために予約されているWindowsのイベントIDの特定の範囲はありますか?

Windowsイベントログにエラーを書き込む.Netアプリケーションに取り組んでいます。このアプリケーションは実際にはサーバーを対象としており、可能な限りロックダウンしたい(特権を減らしたメンテナンスアカウントでの実行を含む)妄想的なシステム管理者によってスケジュールされたタスクとして実行されます。アプリは正式にインストールされません—実際、私はこのためのインストーラーを構築していません。.exeファイルとapp.configファイルを含むzipファイルだけです。

秘訣は次のとおりです。Windowsでは、アプリケーションイベントログにソースを作成するには、管理者権限が必要です。私はこれを当てにすることができず、過労のシステム管理者が作成する必要がないようにするため、フォールバックとして「アプリケーションエラー」(MSOfficeで使用)を使用しています。(Officeはサーバーにインストールされることが少ないため、より適切なフォールバックを選択することが私のToDoリストにあります)。

問題は、Officeになりすますだけでなく、イベントを少し目立たせたいということです。このようにして、私のシステム管理者は、イベントビューアまたは選択したログアグリゲータでそれらのイベントだけに簡単にフィルタリングできます。私が今知っている最善の解決策はイベントIDを使用することですが、特にターゲットオーディエンスを考慮すると、内部のWindowsイベントとの競合が心配です。

調べましたが、これに関するドキュメントが見つかりません。それで、私が使用すべき特定の範囲のイベントIDはありますか、それとも何でも使用できますか、それともここで完全に異なるオプションを検討する必要がありますか?

4

2 に答える 2

4

あまり。トップレベルには、イベントソースがあります。各イベントソースには、独自のイベントカテゴリがあります。各イベントメッセージはイベントソースによって「所有」され、そのイベントカテゴリの1つに分類されます。他の誰かのイベントソースの下でイベントをログに記録する場合は、この規則に違反しているため、イベントIDが衝突する可能性があります。

一方、イベントIDは構造的にHRESULTに類似しており、設定できるカスタマービットがあります。ファシリティコードフィールドもありますが、Microsoftはサードパーティに1つのファシリティのみを提供しています(残りは予約済みです)。これらのビットをいじっても、イベントソースの所有者に翻弄されます。使用しているイベントソースにMicrosoftが何かを書き込んで、カスタマービットまたはファシリティコード(たとえば、OfficeなどのWindows以外のコンポーネント)を設定した場合、衝突の同じ危険にすぐに戻ります。または、他の開発者があなたがしているのと同じことをすることにした場合。本当に最も安全な方法は、独自のイベントソースを定義することです。

于 2011-02-01T21:41:49.227 に答える
2

これが問題の核心だと思われます

特にターゲットオーディエンスを考慮すると、内部のWindowsイベントとの競合が心配です。

イベントIDは特定のイベントソースに対応しているため、心配する必要はないと思います。まったく同じソースを使用しない限り、管理者を混乱させることはありません。たとえば、MSは異なるソースで同じIDを使用することがあります。

登録された発行元とイベントIDに関する情報を取得する場合は、Wevtutilを使用できます。たとえば、発行元が一覧表示されます。

wevtutil ep

そこから、パブリッシャーに使用される特定のイベントIDを取得でき、以下を使用できます(この例ではイベントログが使用されました)

wevtutil gp Microsoft-Windows-EventLog /ge /gm:true

PowerShellが得意な場合は、登録されているすべてのイベントIDを取得するためのスクリプトを考え出すことができると確信しています。

于 2011-02-01T22:31:50.400 に答える