2010-04-07 64 views
1

我在VS2008中构建了一个ActiveX控件安装程序,它使用CRT和MFC合并模块进行安装。当我的控件尝试在Windows 7上注册时,它失败。帮助ActiveX安装?合并模块 - Windows Vista和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以及那些不能在Dependency Walker中解决。但是,该控件会正常注册并运行加载这些库。这是可以忽略的吗?

回答

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的'heat'工具提供了一个非常简单的方法来捕获这些信息,但是如果你编写了DLL,你应该已经知道所需的条目了)。自注册的真正问题是,如果失败,则设置将会消失。最明显的问题是,如果您的DLL需要额外的模块才能成功完成自注册,并且它们正在同时安装,您不能保证系统会发现它们存在以便自注册完成。