私が現在取り組んでいるコードは Windows Server 2003 で実行されますが、複数のマシンの EventLog に書き込める必要があります。VS2008 Pro と .NET Framework 3.5 を使用して、C# でコーディングしています。
コード自体は比較的単純です (フレームワークのおかげです)。
using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource))
{
remoteEvtLog.WriteEntry(Body);
}
"LogName" は、書き込むログの名前を含む文字列です。ほとんどの場合、"Application" です。「HostName」は、ログ エントリが書き込まれるマシンの NetBIOS 名を含む文字列です。「EventSource」は、イベントの送信者の名前を含む文字列です (これは複数のアプリで使用されるユーティリティであるため、通常は消費するアプリケーションの名前になります)。「本文」は、イベント ログに書き込まれるテキストを含む文字列です。
ほとんどの場合、これは正常に機能しますが、書き込み先のマシンが UAC を使用している場合、新しい EventSource を作成する書き込みはすべて失敗します。これは、使用されているセキュリティ資格情報が管理者グループのメンバーであっても発生します。昇格した特権レベルを指定する方法を見つけることができませんでした。どうやら、管理者グループのメンバーは 2 つのトークン (1 つは制限付き、もう 1 つは昇格) を取得しますが、私が知る限り、昇格されたトークンを指定する唯一の方法は UI を使用することです。これは明らかにログにリモート アクセスする場合の問題です。
そこに何かアイデアはありますか?