Wix 64 位应用程序中的 32 位 COM

Posted

技术标签:

【中文标题】Wix 64 位应用程序中的 32 位 COM【英文标题】:Wix 32 bit COMs in 64 bit application 【发布时间】:2020-07-28 15:55:59 【问题描述】:

我正在使用 Wix 为一个应用程序创建安装程序,该应用程序虽然是 64 位,但使用了一些较旧的 32 位 COM。我发现我必须将组件标记为 Win64="no" 才能使该 COM 的注册反映在 Wow6432Node 中。

但是,如果这样做,我将无法再将该组件安装在与应用程序的其余部分相同的目录中,因为我在构建时收到以下错误消息:

Light0204:ICE80:这个 32BitComponent MyCom.dll 使用 64BitDirectory APPLICATIONFOLDER

我不想将我的 COM 安装在 32 位文件夹中;我宁愿把我的应用程序放在一起。但是,如果我删除组件上的 Win64="no" 标记,则该组件无法正确注册并且我无法使用它。 那么,我是否可以将我的 32 位 COM 与我的 64 位应用程序的其余部分一起安装,并且仍然让 Wix 进行注册而不诉诸自我注册?

【问题讨论】:

我猜这是导致构建失败的错误? You can suppress such ICE errors。如果可以,编译 32 位可能不会那么糟糕?我认为将该文件安装到 32 位文件夹也可以,但我知道您不喜欢它。 【参考方案1】:

处理此问题的典型方法是创建 32 位 MSI 和 64 位 MSI,然后使用引导程序(例如 WiX Burn)封装它们。

我倾向于主要进行 .NET 开发,通常我只会为 32 位而不是 AnyCPU 编译应用程序。具有 64 位进程的 AFAIK 使用 32 位 COM 服务器很棘手。

Calling 32bit Code from 64bit Process

【讨论】:

以上是关于Wix 64 位应用程序中的 32 位 COM的主要内容,如果未能解决你的问题,请参考以下文章

如何使用更新条件在 Wix 中设置变量?

在同一应用程序池中的 64 位应用程序中使用 32 位 dll

在 64 位 .NET 应用程序中使用 32 位非托管 COM 服务器

Windows 64 位注册表与32 位注册表

32位和Java中的64位JDBC同时

64 位应用程序和内联汇编