一个打包安装程序时,出现msado25.tlb错误的解决方案
症状
当您使用以打包和部署向导 (PDW) 创建的安装包来安装 Visual Basic 应用程序时,可能会在安装过程中收到以下错误信息(或类似的错误信息):
Unable to register MSADO15.TLB
此错误信息可能会引用以下任何文件:
• |
MSADO15.TLB |
• |
MSADO20.TLB |
• |
MSADO21.TLB |
• |
MSADO25.TLB |
原因
由于您的项目中引用了类型库,打包和部署向导会在安装包中添加类型库 (.tlb) 文件。PDW 还会错误地将 $(DLLSelfRegister) 注册宏分配给为安装包创建的 Setup.lst 文件中的类型库。
大多数情况下,当您的 Visual Basic 项目包含对早于最近安装版本的 ActiveX 数据对象 (ADO) 版本的引用时,将出现此问题。对 ADO 最近安装版本的引用指向 MSADO15.DLL。较早版本的引用则指向上述 ADO 类型库文件。
解决方案
不需要在安装包中显式地包含该文件。如果您的项目中包含对 ADO 类型库的引用,您将在应用程序中利用 ADO,而且必须分发 Microsoft 数据访问组件 (MDAC_TYP.EXE)。唯一的例外情况是您可以保证在目标计算机上已安装正确版本的 MDAC。由于 MDAC 安装程序包括该类型库,因此不应该专门包含该类型库。
有几种解决此问题的方法。究竟采用哪种方法取决于您所处的情况以及将应用程序重新打包是否方便。在解决办法 1 和 2 中,您不需要将应用程序重新打包。解决办法 3、4 和 5 则要求重新打包。只有解决办法 4 和 5 才是长期的修复方案,也是建议的方法。
解决办法 1
1. |
查找程序包的 Setup.lst 文件。 |
2. |
在任何一种文本编辑器中,打开 Setup.lst。 |
3. |
在 Setup.lst 中,找到引用了错误信息中引用的 ADO 类型库的那一行。如果您使用的是记事本,则可以搜索文件名。 |
4. |
将 $(DLLSelfRegister) 更改为 $(TLBRegister)。 |
5. |
保存该文件,并再次尝试安装。 |
解决办法 2
1. |
查找程序包的 Setup.lst 文件。 |
2. |
在任何一种文本编辑器中,打开 Setup.lst。 |
3. |
在 Setup.lst 中,找到引用了错误信息中引用的 ADO 类型库的那一行。如果您使用的是记事本,则可以搜索文件名。 |
4. |
从 Setup.lst 中删除此行。 |
5. |
确保 File##= 语句是按顺序排列的,并且如果必要,请给删除的那一行后的所有行重新编号。 |
6. |
保存该文件,并再次尝试安装。 |
解决办法 3
1. |
启动打包和部署向导,然后打开 Package 脚本(如果已保存)。 |
2. |
完成向导中的步骤,直至到达“打包和部署向导 - 包括的文件”页。 |
3. |
清除错误信息中引用的 ADO 类型库旁的复选框。 |
4. |
完成应用程序的重新打包步骤,并再次尝试安装。 |
解决办法 4
1. |
找到 VB6DEP.ini 文件。默认情况下,该文件位于 C:\Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\ 文件夹中。 |
2. |
在任何一种文本编辑器中打开 VB6DEP.ini。 |
3. |
找到 [Do Not Redistribute] 部分。 |
4. |
将以下行添加到 [Do Not Redistribute] 部分:
MSADO15.TLB=
MSADO20.TLB=
MSADO21.TLB=
MSADO25.TLB=
|
5. |
保存该文件,并关闭文本编辑器。 |
6. |
将应用程序重新打包,并再次尝试安装。 |
注意:此方法可防止问题重复出现。
解决办法 5
1. |
在 Visual Basic 中打开您的项目。 |
2. |
在项目菜单上,单击引用。记下选定的 Microsoft ActiveX 数据对象库版本,然后选中该 ADO 引用的复选框。如果该引用指向 .tlb 文件,则清除该复选框。滚动列表以查找 ADO 的其他版本,选择指向 MSADO15.DLL 的最新版本,然后单击确定。 |
3. |
对项目进行测试,以确认 ADO 功能仍然能正常工作。 |
4. |
保存该项目,然后生成 EXE。 |
5. |
将应用程序重新打包,并再次尝试安装。 |
状态
Microsoft 已经确认这是 Visual Basic 6.0 的“打包和部署向导”中存在的一个问题。
更多信息
引发此错误的原因是 PDW 试图将 $(DLLSelfRegister)(而不是 $(TLBRegister))用于类型库。但是,如果您在安装过程中收到此错误,它不一定表示安装将失败。它也不表示应用程序将无法在安装后运行。此错误指示您的项目中引用的 ADO 类型库版本与随应用程序分发的版本不同。这可能会导致其他问题,因此 Microsoft 建议您验证版本信息。