質問

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

WinServiceプロジェクトで使用する必要があるカスタムログにイベントログソースを登録しています(どのように、なぜ重要ではないか)。

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

私はどこにでも見てきましたが、登録がどこで行われているのか、どのようにオフにできるかを見つけることができません。

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

役に立ちましたか?

解決

デフォルトを削除できます 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)

他のヒント

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

再度サービスを再インストールする機能を復元するために、私は発見しました(この記事に感謝します)レジストリでこのキーを削除する必要があります(regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top