0

我有一个 VB6 应用程序,我正在尝试在 Windows 7 环境中工作,但是每次启动应用程序时,都会出现错误:

“组件'ComCt332.ocx'或其依赖项之一未正确注册:文件丢失或无效”。

要解决此问题,我尝试通过在管理员模式下的命令提示符中运行 regsvr32 来注册 comct332.ocx 文件,但随后出现错误:

“模块“comct332.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80004005”

我尝试过的其他事情包括:

  • 删除注册表中存在“comct332.ocx”的所有父节点并在管理员模式下再次运行 regsvr32。结果相同。

  • 我在PC上授予另一个用户管理员权限,我可以成功注册文件,应用程序启动并成功运行!但是,当我再次以以前的用户身份登录时,它失败了。

任何帮助、想法、其他尝试的东西都会非常感激。谢谢

4

1 回答 1

2

如果您一直在跟上您必须继续成功使用 VB6 的事情,那么您将了解许多事情。

  • 其中之一是 UAC 和每用户注册表虚拟化的影响。

  • 另一个是 SysWOW 注册表重定向对 64 位系统的影响。

您将了解正确的安装包比以往任何时候都更加重要。Windows 对遗留软件有许多自动修复,但其中一些不会导致应用程序具有所有最初预期的行为。它们中的大多数只会在您的应用程序从安装到第二次运行“遵循正确的路径”时应用。

在这里,我们有一个案例旨在通过使用适当的 Windows Installer 程序包来处理,或者至少是通过 Windows 的“旧版安装程序检测启发式”识别的旧版设置。一般来说,旧的脚本设置已被弃用,但只要它们保持在Windows 努力确保它们成功的路径上。

通过复制一堆文件并regsvr32在其中一些文件上随机运行来手动部署会降低成功的机会。无论如何,这从来都不是一种被批准的部署方法。

您很可能与注册表虚拟化和重定向的某些组合发生冲突。

regsvr32实用程序是一个开发工具,而不是部署工具。如果您坚持尝试将其用于部署,则必须遵循开发人员必须遵循的相同规则:

  • 运行正确的版本。在 64 位系统上,此实用程序有 64 位和 32 位版本。您必须使用的 32 位版本位于 SysWOW64 文件夹中。

  • 从提升的命令提示符运行它。一种简单的启动方法是键入<Winkey>cmd.exe<Ctrl-Shift-Enter>然后批准 UAC 提示或根据需要提供肩负管理凭据。

为了取得成功,您还需要了解和处理许多其他事情。如果您忽略了其中的大多数,那么它们中的大多数只有在您的程序安装并运行后才会变得明显。其中很多源于文件系统虚拟化。

于 2012-08-20T05:58:05.990 回答