1

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 ビット) にサービスをインストールしようとすると、イベント ソースがログ "アプリケーション" に既に存在するというメッセージが表示されます。this.Installers.Clear() がデフォルトのソース/ログの作成を妨げると思ったので、それは奇妙です。

情報: サービスをインストールする前に、regedit を使用して「VIAVista」キーがないことを確認しました。

何か案は?何か見逃しましたか?

4

2 に答える 2

2

試す

     serviceInstaller.Installers.Clear(); 
于 2012-08-30T18:07:48.977 に答える
1

これを行う:

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

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

ソースが存在する場合はそれが使用され、存在しない場合は作成されます。

于 2012-08-30T17:28:50.050 に答える