1

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

 <Util:EventSource
          Name="BLAH"
          Log="Application"
          EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll"/>

在 64 位操作系统上,您将其 NETFRAMEWORK40FULLINSTALLROOTDIR 替换为 NETFRAMEWORK40FULLINSTALLROOTDIR64。

我注意到,当您在 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 位版本,那么创建它的正确方法是什么?

4

1 回答 1

0

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

EventLogMessages.dll如果.NET (位 DLL。如果我正确理解您的问题,那正是您所看到的行为。

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

于 2013-01-29T16:13:41.890 回答