安装程序失败,某些DLL的“注册失败”错误

时间:2012-03-18 20:14:46

标签: dll build com vb6

我开发了一个vb6程序,然后使用visual studio interdev构建了一个安装向导。

我使用“依赖性walker”和“进程资源管理器”找出丢失的DLL,但总是存在问题:

IESHIMS.DLL
WER.DLL
MPR.DLL

依赖步行者显示的这些dll。

当在另一台机器上安装程序时,我有以下错误消息:

uxtheme.dll failed to register
msdatsrc.tlb failed to register etc..

PS:在安装了visual studio的机器上没问题。

解决此问题的任何想法?

由于

2 个答案:

答案 0 :(得分:6)

Dependency Walker不是解决VB6依赖关系的合适工具。它适用于使用隐式依赖项以C或C ++编写的DLL。虽然它没有跟上时间的步伐,但是存在于Windows并排缓存中的DLL或者是延迟加载的DLL都有问题。延迟加载是ieshims.dll等人生成警告的原因。

VB6使用COM,它使用LoadLibrary()动态加载DLL。除非使用“配置文件”选项,否则您将永远不会在Depends中看到这种依赖关系。这些DLL可以通过注册表找回,这是您需要编写安装程序并修改regsvr32.exe的原因。

在编写类似的安装程序时,你必须非常小心,VB6是并且可以依赖于自1998年以来已多次更新的操作系统组件。像uxtheme.dll,一个重要的操作系统实现视觉样式的DLL。让安装程序覆盖用户计算机上的现有安装程序是灾难性的。尽管它可能通过其文件系统保护功能受到Windows的保护,但这些功能已被添加为对抗破坏的安装程序的对策。

除了“不伤害”之外,提供适当的建议是困难的。像InstallShield或Wise这样的商业安装人员(当时我喜欢这种安装人员)是避免射击客户腿的最佳方法。相当确定他们仍然支持VB6安装。 Microsoft为VB6提供了一个预先安装的安装程序,可以安装所有核心vb6运行时组件。你可以download it here

答案 1 :(得分:0)

您应该始终仔细检查并验证您认为应用程序需要的任何依赖项。 您提到的所有文件都是系统DLL,不得分发。

对于VB6应用程序,您需要基本运行时,以及您明确引用/使用的任何DLL,当且仅当您获得这些DLL的作者的许可以及有关安装它们的正确过程和位置的说明时。

对于标准的Microsoft提供的OCX文件,这些通常只需要复制到system32文件夹并注册。 有关详细信息,请参阅Visual Studio安装根目录中的redist.txt。