EventLogは、イベントログを出力するクラス・・・。
EventLog クラス (System.Diagnostics)
イベントログを出力してみる・・・。
空のプロジェクトで、
Systemを参照し、MainClass.csは、
これだけ・・・。
"EventLog_"がイベントソースで、ログが"Log Message!"・・・。
で、何故try-catchで囲むかというと、このまま実行すると、
System.Security.SecurityException: ソースが見つかりませんでしたが、いくつかまた はすべてのログを検索できませんでした。アクセス不可能なログ: Security 場所 System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) 場所 System.Diagnostics.EventLog.SourceExists(String source, String machineNa me) 場所 System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, Str ing currentMachineName) 場所 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) 場所 System.Diagnostics.EventLog.WriteEntry(String source, String message, Ev entLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) 場所 System.Diagnostics.EventLog.WriteEntry(String source, String message) 場所 MainClass.Main() 場所 C:\Project\Cloud\github.com\Sample\dotnet\EventLog \EventLog\src\EventLog_\EventLog_\MainClass.cs:行 18 失敗したアセンブリのゾーン: MyComputer 続行するには何かキーを押してください . . .
実は管理者権限で実行すれば成功する・・・。
で、それでもいいが、どうせなので、exeにマニフェストファイルを付けて、管理者権限昇格できるようにしてみた・・・。
しかし、これが結構大変だった・・・。
Visual C# 2005には、マニフェストファイルの追加項目がないので、
そこで、
"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\mt.exe" -manifest "$(ProjectDir)$(TargetFileName).manifest" -outputresource:"$(TargetPath)";1
これを、
[プロパティ]の[ビルドイベント]の[ビルド後に実行するコマンドライン]にセット・・・。
マニフェストファイルは、WindowsAPIのDispatchMessageからプロジェクトフォルダにもってきたが、ファイル名をEventLog_.exe.manifestにした上で、
level="requireAdministrator"にしないとダメ・・・。
さらに、
ビルド構成がAnyCPUだと、管理者権限アイコンがつかないので、x86に変更・・・。
ここまでしてビルドすると、
管理者権限アイコンがつく・・・。
しかし、VisualStudioが一般権限なので、
管理者で実行・・・。
これでデバッグなしで実行すると、
続行するには何かキーを押してください . . .
例外が出なくなり、
イベントログが出るようになる・・・。
Sample/dotnet/EventLog/EventLog/src/EventLog_ at master · bg1bgst333/Sample · GitHub