如果名称与特定字符串不匹配,服务将无法创建事件日志

问题描述 投票:0回答:1

这是一个非常奇怪且特殊的问题:我正在研究Windows服务应用程序,该服务与Visual Studio中的WiX工具集一起安装,使用C#编写。我正在使用的应用程序本质上扩展了在某些事件上从this tutorial;生成的服务的功能,它使用EventLog()对象记录到事件查看器。我使用的代码与链接教程中的代码基本相同:

public MyService()
{
    InitializeComponent();
    string eventSourceName = "MyNewLog source";
    string logName = "MyNewLog";
    eventLog1 = new EventLog();

    if (!EventLog.SourceExists(eventSourceName))
    {
        EventLog.CreateEventSource(eventSourceName, logName);
    }
        eventLog1.Source = eventSourceName;
        eventLog1.Log = logName;
}

我正在使用我用Wix制作的msi文件安装服务,通常一切正常。如果将变量logName更改为MyNewLog以外的其他名称(这是我一直用于测试的名称),则会从msi中收到以下模糊错误(AAJ是我正在使用的占位符名称)服务):

enter image description here

这并不总是发生;它从昨天开始似乎毫无根据地发生。我曾经能够将logName设置为任何内容,并且会很高兴地安装,但是现在我不能使用MyNewLog以外的任何东西。据我检查,当它叫做MyNewLog时,它可以工作。

我尝试过的事情

我现在尝试使用大约10个不同的名称重命名和重新安装该服务,并且也更改了安装目录。这似乎是独立于我打包到Product.wxs Wix XML中的参数而发生的。

我还尝试通过将安装程序添加到项目中,然后使用提升的VS命令提示符来调用installutil.exe来手动安装程序,以安装Windows服务。和以前一样,它会安装,但是如果我尝试启动该服务,则会收到此消息(相同的应用程序,不同的元数据):

enter image description here

看来这是Windows事件日志的问题;无论我对这个问题完全不了解,所以我都不会排除方程式的任何部分。

一些更奇怪的行为:我使用了PowerShell命令Remove-EventLog -LogName "MyNewLog",并成功删除了事件日志。然后,我可以使用另一个字符串MyNewLog0重新安装该程序,尽管该字符串创建了具有该名称的事件日志,但我再也无法使用MyNewLog来创建该程序了。此外,当设置为MyNewLog0时,日志记录信息不会显示在此创建的空间中。如果删除MyNewLog0并替换为MyNewLog,它将再次起作用。但是,它不仅可以再次使用,而且似乎还包含MyNewLog0中的日志!

我知道这可能是一个复杂的问题;我希望有一些使用Event Viewer进行开发的经验的人可以帮助诊断此问题。我不知道自己可以使用任何故障排除工具来解决此问题,也不知道如果不全面了解Event Viewer的功能,这是一种有效的学习方法。就是说,即使太难以捉摸,无法利用这些信息进行诊断,但我希望我能在正确的方向上有所帮助。

c# windows windows-services event-log event-viewer
1个回答
0
投票

您在其下运行服务的帐户没有管理员权限(期望的行为)。服务的安装程序应会创建源(由于安装服务需要管理员权限,它可以很好地工作)。

CreateEventLogSource

要在Windows Vista和更高版本或Windows Server 2003中创建事件源,您必须具有管理特权。

© www.soinside.com 2019 - 2024. All rights reserved.