Windows服务和事件日志的安装项目

时间:2011-02-02 13:46:43

标签: visual-studio setup-project eventlog-source

我有一个安装Windows服务的安装项目。

我们正在自定义日志中注册一个事件日志源,应该由winservice项目使用(如何以及为什么不重要)。

我的问题是安装项目尝试默认创建事件日志源。通过这样做,它得到一条错误消息("Error 1001" source XXX already exists on local computer)并回滚。

我到处寻找,我无法找到注册的位置或我如何关闭它。

如何强制Windows服务或安装项目不创建事件日志源?

3 个答案:

答案 0 :(得分: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 component and its default EventLogInstaller

答案 1 :(得分:3)

我想当你卸载服务时,某些东西没有被正确卸载,特别是在事件日志中。

要恢复重新安装服务的能力,我发现(thanks to this article)您需要在注册表中删除此密钥(regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME

答案 2 :(得分:2)

根据我的测试,这只是猜测。

安装程序项目(或WindowService类)自动创建一个与myService.ServiceName同名的事件源。这很可能是因为每次启动/停止服务时都会将启动/停止消息写入日志。这些消息需要一个来源。

换句话说:您不需要像为自己那样创建一个与ServiceName同名的源。