我需要从C#应用程序中自定义写入事件日志。因为我在运行时没有管理员权限,所以我在WiX安装程序中创建事件源,如下所示:
<u:EventSource Name="SourceName" Log="Application" EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll" />
然后写作:
EventLog.WriteEntry("SourceName", message, EventLogEntryType.Error);
这里的问题是SourceName
必须在我的安装程序和C#代码库之间保持同步 - 它之前已经不同步了。
我目前正在使用主文件的名称来链接这两个,如下所示:
<?define MainExe="MyMain.exe" ?>
<u:EventSource Name="$(var.MainExe)" Log="Application" EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll" />
和
var name = Application.ResourceAssembly.ManifestModule.Name;
EventLog.WriteEntry(name, message, EventLogEntryType.Error);
但这感觉非常黑客。是否有适当的动态获取在WiX安装程序中设置的事件源的名称,或者我是否必须尽可能地提供最好的信息?
答案 0 :(得分:1)
我认为你的DRY有点太过分了。将它保存在两个地方。如果您真的无法做到这一点,WiX安装程序可以转换app.config并在设置中保存事件源的名称。但实际上,在.wx中有1个常量,在.cs中有1个可以。
我唯一一次完成配置文件的时候是我在做产品线时,框架的不同消费者将是具有自己独特日志的不同品牌应用程序。