在C#中获取在WiX安装程序中设置的事件源的名称

时间:2015-06-30 10:35:13

标签: c# wix

我需要从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安装程序中设置的事件源的名称,或者我是否必须尽可能地提供最好的信息?

1 个答案:

答案 0 :(得分:1)

我认为你的DRY有点太过分了。将它保存在两个地方。如果您真的无法做到这一点,WiX安装程序可以转换app.config并在设置中保存事件源的名称。但实际上,在.wx中有1个常量,在.cs中有1个可以。

我唯一一次完成配置文件的时候是我在做产品线时,框架的不同消费者将是具有自己独特日志的不同品牌应用程序。