2009-09-27 17 views
12

私はC#でWindowsサービスを開発しました。 Visual Studio 2008でWindowsサービスをインストールするインストーラを作成しました。今はすべてが良いです。実行時のエラー/例外条件がWindowsイベントログに正しく記録されるように、インストール時にイベントソースが作成されていることを確認します。Windowsサービスをインストールするときに手動でWindowsイベントログソースを作成する必要がありますか

Windowsサービスのインストール(およびアンインストール)の一部としてイベントソースが自動的に作成(および削除)されるのですか、それとも自分で処理してカスタムアクションを作成して、

protected override void OnBeforeInstall(IDictionary savedState) 
{ 
    base.OnBeforeInstall(savedState); 

    if (!EventLog.SourceExists(ServiceName)) 
     EventLog.CreateEventSource(ServiceName, "Application"); 
} 

protected override void OnAfterUninstall(IDictionary savedState) 
{ 
    base.OnAfterInstall(savedState); 

    if (EventLog.SourceExists(ServiceName)) 
     EventLog.DeleteEventSource(ServiceName); 
} 

答えて

12

ServiceInstallerは、インストール時にサービスと同じ名前でDataSourceを自動的に作成するように見えます。そのため、余分なコードは必要ありません。 ServiceInstallerドキュメントのインストールが実行され

から

は、それが自動的にServiceBase派生クラスに関連付けられているイベントログソースをインストールするには、EventLogInstallerを作成します。このソースのLogプロパティは、ServiceInstallerコンストラクタによってコンピュータのアプリケーションログに設定されます。 ServiceInstallerのServiceName(サービスのServiceBase .. ::。ServiceNameと同じにする必要があります)を設定すると、Sourceは自動的に同じ値に設定されます。インストールに失敗すると、ソースのインストールは、以前にインストールされたサービスと一緒にロールバックされます。

8

サービスアカウントは、実行時にそうする権限がない可能性がありますので、インストール時にそれらをあなたを登録する必要があります:How to: Add Your Application as a Source of Event Log Entriesを:

デフォルトでは、あなたが最初にすることなく、 エントリを書き込むしようとした場合有効なソースとして を登録すると、 システムは、 ソース文字列として のSourceプロパティの値を使用して、 ソースをイベントログに自動的に登録します。一般に、 アプリケーションのインストール中に、新しいイベントソース を作成します。この は、オペレーティングシステム が登録されている イベントソースのリストとその設定をリフレッシュする時間を許可します。 オペレーティングシステムで がイベントソースのリスト をリフレッシュせず、 の新しいソースでイベントを書き込もうとすると、書き込み操作 は失敗します。インストール中に ソースを作成するオプションがない場合は、 最初の書き込み操作の前に ソースウェルを作成しようとしました。 の初期化中に が初期化されました。この アプローチを選択した場合は、コンピュータの 権限で初期化コード が実行されていることを確認してください。既に判明として新しいイベントに ソース

を作成するために必要とされる これらの権利は幸いにもServiceInstallerは、それは本当に簡単です。

関連する問題