使用wix创建应用程序事件日志的推荐方法似乎是
<Util:EventSource
Name="BLAH"
Log="Application"
EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll"/>
在64位操作系统上,用NETFRAMEWORK40FULLINSTALLROOTDIR64替换它NETFRAMEWORK40FULLINSTALLROOTDIR。
我注意到,当您在64位操作系统上运行32位应用程序时,当您使用代码中的.NET EventLog.CreateEventSource方法时,它会使用NETFRAMEWORK40FULLINSTALLROOTDIR创建一个事件日志。
EventMessageFile => C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll
如果您运行64位版本的应用程序而没有事件日志,则会创建它
EventMessageFile => C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll
无论EventMessageFile是否在路径中都有Framework或Framework64,应用程序的32位和64位版本都可以在创建后快速写入。
这是受支持的行为吗?如果要同时允许32位和64位版本的应用程序,创建它的正确方法是什么?
答案 0 :(得分:0)
Windows事件日志允许您创建本地化的事件日志消息文件。当Microsoft编写属于Windows的服务时,他们可能希望能够本地化写入事件日志的内容。但是,几乎所有其他人都希望能够以他们选择的语言将字符串写入事件日志,这正是.NET事件日志包装器提供的。因此,.NET提供了一个非常通用的事件日志消息文件,它不包含本地化消息,只包含一个带有单个参数占位符的消息,其中插入了提供的字符串参数,使您可以完全控制.NET应用程序写入事件日志的内容。
如果.NET(EventLogMessages.dll
)中的32位和64位默认事件日志消息文件包含不同的消息,我会感到惊讶,但即使有了这些知识,您也应该将32位服务指向32位DLL和64位DLL的64位服务。如果我正确理解你的问题,那就是你所看到的行为。
关于.NET事件日志消息文件,没有真正的“并排”问题。但是,如果您出于某种原因决定创建自己的(可能是本地化的)事件日志消息文件,则可以使用这两个服务安装此文件的两个副本,也可以共享一个副本然后安装到%CommonProgramFiles%
。但是,如果一个版本独立于另一个版本更新,那么不进行带有两个副本的并行安装可能会导致问题。