C# 在32位与64位操作系统上使用wix创建事件日志

C# 在32位与64位操作系统上使用wix创建事件日志,c#,wix,event-log,C#,Wix,Event Log,使用wix创建应用程序事件日志的推荐方法似乎是 <Util:EventSource Name="BLAH" Log="Application" EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll"/> 如果您运行的应用程序的64位版本没有事件日志,它将创建这样的应用程序 EventMessageFile => C:\Win

使用wix创建应用程序事件日志的推荐方法似乎是

 <Util:EventSource
          Name="BLAH"
          Log="Application"
          EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll"/>
如果您运行的应用程序的64位版本没有事件日志,它将创建这样的应用程序

EventMessageFile => C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll
无论EventMessageFile的路径中是Framework还是Framework64,32位和64位版本的应用程序都可以在创建后愉快地写入


这是受支持的行为吗?如果同时允许32位和64位版本的应用程序,正确的创建方法是什么?

Windows事件日志允许您创建本地化的事件日志消息文件。当Microsoft正在编写作为Windows一部分的服务时,他们可能希望能够本地化写入事件日志的内容。然而,几乎所有其他人都希望能够用自己选择的语言将字符串写入事件日志,而这正是.NET事件日志包装器所提供的。因此.NET提供了一个非常通用的事件日志消息文件,该文件不包含本地化消息,而只包含一个带有单个参数占位符的消息,在该占位符中插入了提供的字符串参数,使您能够完全控制.NET应用程序写入事件日志的内容

如果.NET EventLogMessages.dll中的32位和64位默认事件日志消息文件包含不同的消息,我会感到惊讶,但即使知道这些,您也应该将32位服务指向32位dll,将64位服务指向64位dll。如果我正确理解你的问题,那正是你所看到的行为


对于.NET事件日志消息文件,没有实际的并行问题。但是,如果出于某种原因决定创建自己的可能是本地化的事件日志消息文件,则可以使用两个服务安装此文件的两个副本,或者共享一个副本,然后安装到%CommonProgramFiles%。然而如果一个版本独立于另一个版本进行更新,不使用两个副本并行安装可能会导致问题。

下面是一个在WiX中创建事件日志源的示例-处理32位和64位以及.NET 4完整和.NET 4客户端配置文件-使用UtilExtension:EventLogMessages.dll包含字符串资源0-65535和%s是的,它们都是相同的!。在旧版本的框架中,这些资源位于其他dll上,我不记得是哪个。这些是虚拟本地化消息,仅用作.NET应用程序决定记录的字符串的容器。在.NET Framework中,为了简化API,最初的本地化资源字符串方案在设计上已被放弃。
EventMessageFile => C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll