7

Windowsサービスをインストールするセットアッププロジェクトを入手しました。

winserviceプロジェクトで使用する必要があるカスタムログにイベントログソースを登録しています(方法と理由は重要ではありません)。

私の問題は、セットアッププロジェクトがデフォルトでイベントログソースを作成しようとすることです。そうすることで、エラーメッセージ("Error 1001" source XXX already exists on local computer)が表示され、ロールバックされます。

どこを見ても、どこで登録が行われているのか、どうすればオフにできるのかわかりません。

Windowsサービスまたはセットアッププロジェクトにイベントログソースを作成しないように強制するにはどうすればよいですか?

4

3 に答える 3

7

デフォルトを削除できますEventLogInstaller

namespace MyService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();

            // Remove the default Event Log Installer
            EventLogInstaller DefaultInstaller = null;
            foreach (Installer installer in serviceInstaller1.Installers)
            {
                if (installer is EventLogInstaller)
                {
                    DefaultInstaller = (EventLogInstaller)installer;
                    break;
                }
            }
            if (DefaultInstaller != null)
            {
                serviceInstaller1.Installers.Remove(DefaultInstaller);
            }
        }
    }
}

または、Logプロパティを変更することもできます。

foreach (Installer installer in serviceInstaller1.Installers)
{
    if (installer is EventLogInstaller)
    {
        ((EventLogInstaller)installer).Log = "MyLog";
        break;
    }
}

これで、イベントはMyLogに正常に記録され、サービスの開始/停止イベントは引き続きアプリケーションログに記録されます。

(ソース:serviceInstallerコンポーネントとそのデフォルトのEventLogInstaller

于 2012-01-16T15:08:59.613 に答える
3

サービスをアンインストールすると、特にイベントログで何かが正しくアンインストールされていないようです。

サービスを再インストールする機能を復元するには、(この記事のおかげで)レジストリ(regedit.exe)からこのキーを削除する必要があることがわかりました。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME
于 2011-11-14T16:24:35.680 に答える
2

これは私のテストに基づく推測にすぎません。

インストーラープロジェクト(またはWindowServiceクラス)は、と同じ名前のイベントソースを自動的に作成しますmyService.ServiceName。これは、サービスが開始/停止されるたびに開始/停止メッセージがログに書き込まれるためである可能性があります。そして、それらのメッセージにはソースが必要です。

言い換えると、ServiceNameと同じ名前のソースを作成する必要はありません。

于 2011-02-16T06:06:03.370 に答える