更新KB 2687323后,VB6 IDE无法加载MSCOMCTL.OCX
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新KB 2687323后,VB6 IDE无法加载MSCOMCTL.OCX相关的知识,希望对你有一定的参考价值。
在Windows更新安装了安全更新KB2687323后,我的VB6项目无法加载。显示的错误消息是“'[project_vbp_path] /MSCOMCTL.OCX'无法加载 - 继续加载项目?”。请注意,messeage中的路径是vbp文件夹路径而不是控件的注册路径。
细节:
- MSCOMCTL.OCX在通常的system32文件夹中注册。
- 完全相同的项目生成的可执行文件,在更新前一小时运行正常并加载更新的MSCOMCTL.OCX(我已使用Process Explorer检查过它)。
安全更新说明指出MSCOMCTL.OCX具有新的固定版本。所以我检查了“升级ActiveX控件”复选框的项目属性。我试过两种方式;检查和取消选中无济于事。 VB6 IDE拒绝加载升级后的OCX。
经过几个小时的努力,系统恢复,注册,取消注册周期和睡眠,我已经设法找出问题所在。事实证明,项目文件包含以下行:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
版本信息“2.0”似乎是没有加载的原因。在记事本中将其更改为“2.1”解决了问题:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
所以在类似的“OCX无法加载”的情况下,一种可能的解决方法是启动一个新项目。将控件放在其中一个表单上,并使用记事本检查vbp文件以查看它所期望的版本。
或者更简单的方法:
(我在Bob的宝贵评论下面添加了这一部分)
您可以在记事本中打开VBP项目文件,找到阻止VB6自动将项目升级到2.1并删除它的讨厌行:
NoControlUpgrade=1
我在我的vbp项目中找不到NoControlUpgrade=1
。相反,我在xp和windows7 x64上开发。当我将项目从窗口7移动到xp时,发生了错误。
根据我的发现,这些是不同的:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
我刚刚在vbp文件上将#2,1
更改回#2.0
,它可以立即运行。之前发生过这类问题,所以希望微软相应地解释和解决它们。谢谢。
我有这个问题并尝试了许多不同的解决方案。他们不适合我,虽然我认为这个错误出于几个不同的原因。我的解决方案是我在这里回答这个问题:
https://stackoverflow.com/a/15785253/2240058
如果没有别的东西适合你,它值得一试。
今天神秘地出现了这个问题。我没有做任何Windows更新,所以我不知道原因。
这修复了它(在提升的命令提示符下):
regtlibv12.exe msdatsrc.tlb
对我来说,这个解决方案就像一个魅力:http://home.pacific.net.hk/~edx/bin/readmeocx.txt
修复这两行:
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
搜索文件(.vbp和.frm)以获取如下行:
Begin ComctlLib.ImageList ILTree
Begin ComctlLib.StatusBar StatusBar1
Begin ComctlLib.Toolbar Toolbar1`
这些行可能是这样的:
Begin MSComctlLib.ImageList ILTree
Begin MSComctlLib.StatusBar StatusBar1
Begin MSComctlLib.Toolbar Toolbar1`
我最近把我所有的资源放在了Windows 8 32的盒子上。有问题加载mscomctl.ocx
与现有项目。
我创建了一个新项目并添加了公共控件(全部)。保存项目并重新加载没问题。
当你比较项目标题new vs old时,旧标题使用reference = * blah blah。我发现删除了这个替换它与Object = {blah}解决了问题。
在尝试了这里建议的事情后,我仍然遇到问题。最后,事实证明我的SysWOW64文件夹中有错误版本的mscomctl.ocx
。我找到了以下版本:
Mar. 09, 2004 01:00 AM 1,081,616 mscomctl.ocx
Jun. 06, 2012 07:59 PM 1,070,152 mscomctl.ocx
Dec. 08, 2015 03:57 AM 1,070,232 MSCOMCTL.OCX
得到最后一个(1,070,232)为我解决了这个问题。
我有类似的麻烦,有一个用VB6编写的程序运行了10年,现在客户想要做一些重大的修改,我所有的机器现在都是windows 10;无法打开项目,总是那令人讨厌的mscomctl.ocx错误。我做了很多事但却无法解决问题。然后我想到了简单的方法,我下载了最新的mscomctl(然后打开了一个新项目,添加了所有组件,如mscomctl,activx控件等,保存并在记事本中打开这个新创建的项目文件,然后复制了确切的细节和在原始项目中取代....和宾果游戏!旧项目通常没有任何大惊小怪的开放!我希望这种体验能够帮助某些人。
通过在提升的命令提示符中运行以下命令已解决此问题:
命令:
cd C:WindowsSystem32
regtlib msdatsrc.tlb
要么
cd C:WindowsSysWOW64
regtlib msdatsrc.tlb
我希望这有帮助。
问题:
Microsoft Office 2010产品(或更高版本)安装会破坏MSCOMCTL.ocx和COMCTL32.ocx兼容性的更新。不幸的是,这会影响许多其他程序,如Visual Basic 6 SP6甚至Oracle Virtual Box v5。实际问题是HKEY_CLASSES_ROOTTypeLib{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.0
注册表项。您可以找到有关此问题的详细背景信息here。
这是另一个有效的解决方案
该解决方案假定您没有通过删除,替换和重新注册MSCOMCTL.ocx和COMCTL32.ocx而未注销Office修补程序文件来损坏您的注册表。
创建一个名为fix.cmd的批处理文件,并在其中放置以下命令:
regsvr32 /s /u %windir%SysWOW64comctl32.ocx
regsvr32 /s /u %windir%SysWOW64mscomctl.ocx
del /y %windir%SysWOW64comctl32.ocx
del /y %windir%SysWOW64mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%SysWOW64msdatsrc.tlb
从Security update for Visual Basic 6.0 Service Pack 6: August 14, 2012下载msi文件并将其重命名为KB2708437.msi。
注意:有关Service Pack 6下载的直接链接位于HERE。
运行fix.cmd,问题将得到解决!
fix.cmd的作用是正确取消注册然后删除当前的MSCOMCTL.ocx和COMCTL32.ocx文件,然后应用最新的Visual Basic 6 SP6汇总补丁。事实上,该脚本强制安装补丁,然后通过更新每个文件重新安装,无论版本如何。最后它注册了msdatsrc.tlb类型库。
如果这对你有用,请告诉我。
======================================================================
高级解决方案
但是,如果您不小心损坏了注册表,则需要获得尽可能多的MSCOMCTL.ocx和COMCTL32.ocx版本。然后,您需要从较旧的版本开始返回到较旧版本并注册并取消注册ocx文件。
最新版本的MSCOMCTL.ocx是2012年5月的6.1.98.39(v2.1),更有可能是系统上安装的并导致所有问题。
最古老的(遗留)版本是1998年6.1.97.82(v2.0)附带的Visual Basic 6附带的版本,或2005年4月附带的早期服务包6.1.97.86附带的版本。
例:
regsvr32 /s comctl32.6.0.98.34.ocx
regsvr32 /s /u comctl32.6.0.98.34.ocx
regsvr32 /s comctl32.6.0.81.6.ocx
regsvr32 /s /u comctl32.6.0.81.6.ocx
regsvr32 /s comctl32.6.0.81.5.ocx
regsvr32 /s /u comctl32.6.0.81.5.ocx
regsvr32 /s mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s /u mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s mscomctl.6.1.98.34.ocx
regsvr32 /s /u mscomctl.6.1.98.34.ocx
regsvr32 /s mscomctl.6.1.97.86.ocx
regsvr32 /s /u mscomctl.6.1.97.86.ocx
regsvr32 /s mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u %windir%SysWOW64comctl32.ocx
regsvr32 /s /u %windir%SysWOW64mscomctl.ocx
del /q %windir%SysWOW64comctl32.ocx
del /q %windir%SysWOW64mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%SysWOW64msdatsrc.tlb
警告:
不要在互联网上搜索这些文件。要查找不同版本的OCX文件,请下载并解压缩官方Microsoft Installer程序包,如下所示:
2012 May - Microsoft KB2708437
还建议运行CCleaner 4.0或更高版本以修复计算机上任何其他与ActiveX相关的问题。
解决问题:
使用以下代码制作批处理文件:
@echo off
reg query "HKEY_CLASSES_ROOT ypelib{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.1"
if %errorlevel%==0 GOTO DELREGKEY
if %errorlevel%==1 GOTO REGISTEROCX
:DELREGKEY
reg delete hkcr ypelib{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.0 /f
:REGISTEROCX
if exist %systemroot%SysWOW64cscript.exe goto 64
%systemroot%system32
egsvr32 /u mscomctl.ocx /s
%systemroot%system32
egsvr32 mscomctl.ocx /s
exit
:64
%systemroot%sysWOW64
egsvr32 /u mscomctl.ocx /s
%systemroot%sysWOW64
egsvr32 mscomctl.ocx /s
exit
我使用win7并遇到同样的问题。今天我解决了这个问题,通过加载我的项目的许多错误只是命令继续之后转到Project => Component => Microsoft Windows Common Controls 6.0(SP6)然后保存项目(文件使用是c: windows syswow64 MSCOMCTL.OCX)
我的解决方案是安装这个VB6补丁。我在Server2008(32位)上。
http://www.microsoft.com/en-us/download/d 以上是关于更新KB 2687323后,VB6 IDE无法加载MSCOMCTL.OCX的主要内容,如果未能解决你的问题,请参考以下文章