15

私はC#でWindowsサービスを開発しました。Visual Studio 2008を使用して、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);
}
4

2 に答える 2

16

インストール中にサービスと同じ名前のデータソースが自動的に作成されるように見えるServiceInstallerので、余分なコードは必要ありません。

ServiceInstallerのドキュメントから

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

于 2009-11-01T22:22:16.327 に答える
9

サービスアカウントには実行時に登録する権限がない可能性があるため、インストール時に登録する必要があります。方法:アプリケーションをイベントログエントリのソースとして追加する

デフォルトでは、最初にコンポーネントを有効なソースとして登録せずにエントリを書き込もうとすると、システムはSourceプロパティの値をソース文字列として使用して、ソースをイベントログに自動的に登録します。通常、アプリケーションのインストール中に新しいイベントソースを作成します。これにより、オペレーティングシステムが登録済みのイベントソースとその構成のリストを更新する時間ができます。オペレーティングシステムがイベントソースのリストを更新しておらず、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します。インストール中にソースを作成するオプションがない場合は、おそらくアプリケーションの初期化中に、最初の書き込み操作のかなり前にソースを作成してみてください。このアプローチを選択した場合、初期化コードがコンピューターの管理者権限で実行されていることを確認してください。これらの権利は、新しいイベントソースを作成するために必要です

幸いなことに、ServiceInstallerを使用すると、すでにご存知のとおり、非常に簡単です。

于 2009-09-27T22:14:56.710 に答える