【发布时间】:2011-12-24 21:16:46
【问题描述】:
我有一个希望在 64 位环境中部署的 COM 组件。有多个应用程序使用此 COM 组件。其中一些应用程序是 32 位的,而另一些是 64 位的。 因此,在创建安装程序时,我将捆绑我的 COM dll 的 32 位和 64 位版本。 在我的第一次尝试中,在构建安装程序项目时,我收到了很多警告:
例如。警告:两个或更多对象具有相同的目标位置 ('[payload_ul]\msvcp90.dll')
上面的警告与合并模块有关。我已经检查过,但没有多个合并模块存在。
虽然项目编译成功但出现警告,但在测试时我发现 64 位模块注册失败。
MSI 标记为 x64 平台。
任何人都可以提供正确方法的指针吗?
【问题讨论】:
-
您需要 32 位和 64 位 MSVC C++ 运行时,这就是您要合并该模块两次的原因。
-
hmmm...有没有办法避免这种情况..安装程序可以更好地组织吗?还有组件未注册的问题。
-
组件未注册,因为冲突只安装了一个运行时DLL,导致您的组件DLL无法从regsvr32加载。
-
避免所有这些麻烦的最简单方法是静态链接 C++ 运行时并省略对运行时 DLL 的依赖。显然,这不是一个通用的解决方案,但如果你只是想运送一些东西,那就“足够好”了。