1

我正在 VS2008 中构建一个 ActiveX 控件安装程序,它同时使用 CRT 和 MFC 合并模块进行安装。当我的控件尝试在 Windows 7 上注册时,它失败了。

Dependency Walker 说我在尝试注册我的控件并且安装失败时缺少 mfc90u.dll、msvcr90.dll 和 msvcp90.dll 依赖项。合并模块是否应该处理这个问题?我的输出 OCX 正在使用 vsdrpCOMSelfReg 选项进行注册。从我在其他论坛上阅读的内容来看,这可能不是最好的方法,此时我应该尝试什么?

安装在 Windows XP 上运行良好。

2010 年 4 月 8 日更新:

更改为 vsdrpCOM 并且安装通过(不足为奇),但是之后找不到 msvcr90.dll。我认为这是由 CRT (microsoft_vc90_crt_x86.msm) 的合并模块处理的?在 Windows XP 上,Dependency Walker 在 Windows/System32 中找到它,而不是像我预期的那样在 SxS 文件夹中。在 Windows 7 上,它根本找不到它。我应该自己将 msvcr90.dll 放入 Windows/System32 吗?看起来不像。

2010 年 4 月 20 日更新:

看起来 Dependency Walker 似乎在控件本身的顶级依赖项中找到了 msvcr90.dll,尽管 msvcp90.dll 和 mfc90u.dll 都对 msvcr90.dll 具有隐式/转发的依赖项,并且这些无法在依赖沃克。但是,该控件可以正常注册并运行加载这些库。这是可以忽略的事情吗?

4

1 回答 1

1

您需要的两个模块是: - Microsoft_VC90_MFC_x86.msm - Microsoft_VC90_CRT_x86.msm

对于 64 位应用程序,您应该使用 - Microsoft_VC90_MFC_x86_64.msm - Microsoft_VC90_CRT_x86_64.msm

不幸的是,自注册会导致很多问题,您应该将所需的注册表项手动添加到安装项目中。(来自WiX的“加热”工具提供了一种非常简单的方法来捕获此信息,尽管如果您编写了 DLL,您应该已经知道所需的条目)。自注册的真正问题是,如果它失败了,那么安装程序就会死掉。最明显的问题是,如果您的 DLL 需要其他模块才能成功完成自注册,并且它们正在同时安装,您不能保证系统会发现它们存在以完成自注册。

于 2010-04-08T04:15:01.337 回答