代码之家  ›  专栏  ›  技术社区  ›  Elan

安装Windows服务时是否需要手动创建Windows事件日志源

  •  12
  • Elan  · 技术社区  · 17 年前

    事件源是作为windows服务安装(和卸载)的一部分自动创建(和删除)的,还是我必须自己处理并创建自定义操作来创建和删除它,如下所示?

    protected override void OnBeforeInstall(IDictionary savedState)
    {
        base.OnBeforeInstall(savedState);
    
        if (!EventLog.SourceExists(ServiceName))
            EventLog.CreateEventSource(ServiceName, "Application");
    }
    
    protected override void OnAfterUninstall(IDictionary savedState)
    {
        base.OnAfterInstall(savedState);
    
        if (EventLog.SourceExists(ServiceName))
            EventLog.DeleteEventSource(ServiceName);
    }
    
    2 回复  |  直到 17 年前
        1
  •  15
  •   Ray    16 年前

    ServiceInstaller

    从 ServiceInstaller 文档

    执行安装时,它会自动创建EventLogInstaller以安装与ServiceBase派生类关联的事件日志源。此源的Log属性由ServiceInstaller构造函数设置为计算机的应用程序日志。设置ServiceInstaller的ServiceName(应与服务的ServiceBase..::.ServiceName相同)时,源将自动设置为相同的值。在安装失败时,源的安装将与以前安装的服务一起回滚。

        2
  •  9
  •   Remus Rusanu    17 年前

    您应该在安装期间注册它们,因为服务帐户在运行时可能没有这样做的权限: How to: Add Your Application as a Source of Event Log Entries :

    默认情况下,如果您尝试编写 未经注册而进入 您的组件作为有效源 系统自动注册 源属性的值作为 源字符串。通常,创建 安装您的应用程序。这 刷新其已注册用户列表 事件源及其配置。 刷新其事件源列表 您试图用 新的源,写操作 将失败。如果正在创建源 在安装期间,不可选择, 在第一次写入操作之前, 也许在你申请的时候 方法,请确保您的初始化 代码正在与管理员一起运行 创建新事件时需要 来源

    ServiceInstaller 正如你已经发现的那样,这样做非常容易。

    推荐文章