Windows服务:已存在指定的eventSource

时间:2012-08-30 15:10:42

标签: c# windows-services event-log

我在C#(.NET 4)中编写Windows服务。

以下是安装程序的代码:

 [RunInstaller(true)]
public partial class JobManagerInstaller : Installer
{
    public JobManagerInstaller()
    {
        InitializeComponent();

        this.Installers.Clear();

        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        ServiceInstaller serviceInstaller = new ServiceInstaller();
        EventLogInstaller eventLogInstaller = new EventLogInstaller();

        // Service Account Information
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
        serviceProcessInstaller.Username = null;
        serviceProcessInstaller.Password = null;

        // Service Information
        // The installer's ServiceName must be identical to the JobManager.ServiceName set in the constructor of JobManager.cs
        serviceInstaller.ServiceName = "VIAVista";
        serviceInstaller.DisplayName = "VIAVista";
        serviceInstaller.StartType = ServiceStartMode.Automatic;

        // EventLog
        eventLogInstaller.Source = "VIAVista";
        eventLogInstaller.Log = "VIAVista";

        // Dependency SQL Server service (i.e.SQL Server must run)
        serviceInstaller.ServicesDependedOn = new string[] { "MSSQL$SQLEXPRESS" };

        this.Installers.Add(serviceProcessInstaller);
        this.Installers.Add(serviceInstaller);
        this.Installers.Add(eventLogInstaller);
    }
}

正如您所见,我希望我的活动的来源和日志被命名为" VIAVista"。

当我尝试在我的服务器上安装服务(Windows Web Server 2008 R2 64位)时,我告诉事件源已存在于日志"应用程序"中。这是因为我认为这很奇怪.Installers.Clear()会阻止创建默认的源/日志。

信息:我使用regedit来确保没有" VIAVista"安装服务前的密钥。

有什么想法吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

尝试

     serviceInstaller.Installers.Clear(); 

答案 1 :(得分:1)

这样做:

if (!EventLog.SourceExists(source))
    EventLog.CreateEventSource(source, log);

EventLog.WriteEntry(source, message, type, eventid);

如果源存在,将使用它,否则将创建它。