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

问题描述 投票:2回答:2

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

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

IESHIMS.DLL
WER.DLL
MPR.DLL

这些dll由依赖者walker显示。

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

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

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

有什么想法来解决这个问题吗?

谢谢

dll build com vb6
2个回答
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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.