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

jga*_*fin 7 eventlog-source setup-project visual-studio

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

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

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

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

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

use*_*702 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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以修改Log属性:

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

现在事件将成功记录到MyLog,服务启动/停止事件仍将记录到应用程序日志中.

(来源:serviceInstaller组件及其默认的EventLogInstaller)