![32 位 .DLL 在安装时注册(Win7 64 位),但 regsvr32 不注册](https://linux22.com/image/1357349/32%20%E4%BD%8D%20.DLL%20%E5%9C%A8%E5%AE%89%E8%A3%85%E6%97%B6%E6%B3%A8%E5%86%8C%EF%BC%88Win7%2064%20%E4%BD%8D%EF%BC%89%EF%BC%8C%E4%BD%86%20regsvr32%20%E4%B8%8D%E6%B3%A8%E5%86%8C.png)
我有一个 32 位应用程序,它使用 VC++ 6 开发的 32 位 .DLL(部署为 Win32UMinDependency),我无法在 Windows 7/8 64 位计算机上注册。除了应用程序之外,还有 vbAccelerator ActiveX 控件、许多其他第三方 .DLL 和内部构建的 .DLL。我可以注册软件包中的所有 .DLL,但有一个除外。这是为什么?
我尝试过使用regsvr32
fromSysWOW64
和system32
,尝试过将 .DLL 放入SysWOW64
文件夹中并尝试注册,然后对system32
文件夹也进行同样的操作。我尝试过取消注册。我尝试过旧版本、新版本、当前版本。我尝试过在不同的兼容模式下运行应用程序。你说得出来的,我都试过了。它根本不起作用。
这种行为很奇怪,因为 .DLL 和所有其他文件都是使用 InstallShield 构建的 .MSI 安装包安装在机器上的,应用程序在全新安装中运行良好。但我们遇到了一个错误——在否多次重新安装——我必须在机器上安装 VB6,然后逐步检查代码以查看哪个 .DLL 有问题。碰巧是我无法注册的 .DLL,然后我注意到 ActiveX 控件没有显示其数据(网格中有数据,但数据没有显示)。
创建新用户帐户 --> 赋予其管理员权限 --> 登录后,卸载 VB6 并尝试安装 VS6 包 (VB6、VC++6、MDAC、VS6 Service Pack 6),但失败了。因此,我尝试再次安装原始 VB6 包,但失败了(不记得错误是什么)。沮丧之余,我加载了我的应用程序,一切正常,但我仍然无法注册 .DLL。我切换回原始用户帐户,它在那里也能正常工作。
那么,为什么.DLL 可以有密钥regedit
并且应用程序可以正常工作,但是无法在代码中加载 .DLL,导致 Windows 无法安装 VS6,然后应用程序又可以正常工作呢?