【问题标题】:32bit COM dlls on 64bit machine64 位机器中的 32 位 COM dll
【发布时间】:2012-05-22 03:31:31
【问题描述】:

我有一个奇怪的微星!!!

我已经在 64 位机器上安装了我的 32 位 msi(target=x86),除了一些无法加载的 COM dll 并得到“尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)”这个错误。

我注意到相同的 COM dll 在开发环境中的 64 位机器上运行良好。我不知道为什么 msi 安装的 COM 有问题。

问候,

吉里什

【问题讨论】:

  • 您确定您的 32 位安装包只包含 32 位 COM dll 吗? COM 注册也需要 UAC 提升。
  • 感谢您的回复,我确定这些是 32 位 COM dll,因为它在 32 位操作系统上运行良好。我还注意到,当我在 64 位机器上进行 VS 2008 开发时,相同的 COM DLL 负载正常

标签: c# dll com 64-bit


【解决方案1】:

如果您使用 InstallShield 创建 MSI,则合并到注册表中的 COM 信息可能位于也可能不在正确位置。由于 InstallShield 通常会在安装程序构建期间提取注册表信息,并在安装时将其合并到注册表中,因此如果您没有仔细检查,它可能会或可能不会正确。

您需要确保 32 位组件的 COM 信息仅存在于 Wow6432Node 键下。

【讨论】:

【解决方案2】:

您的 C# 程序(exe 项目)必须编译为 x86(32 位)才能加载 x86 库。

【讨论】:

  • 是的,我的 msi 是作为平台目标 x86 构建的
  • 您的 msi 包含您的 exe,您的 exe 也应构建为 x86。
  • 我没有那些 DLL 和 EXE 的源代码,它们是很久以前开发并提供给我们的。除了将其构建为 x86 之外,还有其他解决方法吗?
  • 更多信息:该解决方案由 60 多个项目组成,除了 wixproject(WIX,用于创建 msi 的项目) 全部设置为 platform='ANY CPU'。我应该将解决方案中的所有项目更改为“x86”
  • 对 exe 项目执行此操作就足够了。
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 2011-04-09
  • 2013-03-02
  • 2011-03-27
  • 2012-01-29
  • 1970-01-01
  • 2011-05-12
  • 2015-08-19
相关资源
最近更新 更多