2009-08-28 1 views
1

現在作業中のコードはWindows Server 2003上で動作しますが、複数のマシン上でEventLogに書き込む必要があります。私はC#でVS2008 Proと.NET Framework 3.5を使ってコーディングしています。 「アプリケーション」ほとんどの場合 -UACが私に合ってくれます!

using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource)) 
{ 
    remoteEvtLog.WriteEntry(Body); 
} 

「LOGNAMEは」への書き込みをログの名前を含む文字列です:

コード自体は(フレームワークのおかげで)比較的簡単です。 "HostName"は、ログエントリを書き込むマシンのNetBIOS名を含む文字列です。 "EventSource"は、イベント送信者の名前を含む文字列です(これは複数のアプリケーションで使用されるユーティリティなので、一般的には使用するアプリケーションの名前になります)。 "本文"は、イベントログに書き込まれるテキストを含む文字列です。

ほとんどの場合、正常に動作しますが、書き込むマシンにUACを使用すると、新しいEventSourceを作成する書き込みは失敗します。これは、使用されるセキュリティ資格がAdministratorsグループのメンバであるにもかかわらず、昇格された権限レベルを指定する方法を見つけることができなかった場合でも発生します。どうやら、管理者goroupのメンバーは2つのトークンを取得していますが、1つは制限されていて、1つは昇格していますが、私が知る限り、トークンを特定する唯一の方法はUIを経由する方法です。

答えて

0

あなたのコードは、新しいイベントソースを作成することは想定されていません(従来の自動作成動作は残念ですが、間違っています)。アプリケーションに別のイベントソースが必要な場合は、管理者特権で実行されるそのアプリケーションのインストーラーで作成する必要があります。

+0

そして、どのように(VS Setup Deploy projectからの)インストーラを使用すればいいですか? (ハイジャックには申し訳ありません)。 – Nate

+0

私はあなたがVSセットアッププロジェクトでこれを行うことはできないと思っています。そのことは非常に制限されています。もちろん、OrcasのMSI結果を手で編集することはできますが、それは非常に不便です。一般に、セットアッププロジェクトよりも多くのものが必要であることがわかった場合、実際のアプリケーションではほぼ確実ですが、WiXに切り替える必要があります。ソリューションエクスプローラで –

+1

、デフォルトのプロジェクトを右クリックします。ダイアログで[追加]> [新しい項目 を選択し、新しいクラスが追加され、それ インストーラクラステンプレート、名を選択 - InitializeCompnent(への呼び出し後に)、これを追加!コード: 場合(EventLog.SourceExists( "MYSOURCE")EventLog.CreateEventSource( "MYSOURCE"、 "アプリケーション"); は、セットアッププロジェクトを追加&プライマリ出力を追加 セットアッププロジェクトを右クリックし、[表示> CustomActions インストールフォルダを右クリックし、カスタムアクションの追加を選択します。 アプリケーションフォルダを選択してから、一次出力 - 「OK」をクリックします。 Save&Build - 追加したコードがセットアップで実行されます – DragonsRightWing

関連する問題