Access 2010-使用TreeView (MSComctlLib.TreeCtrl.2) 在windows 安全补丁更新之后, 使用就出现错误了
复制 MSCOMCTL.OCX 到 syswow64下再注册也不行
建议 使用版本: 6.1.98.34
相关资料: http://www.microsoft.com/zh-cn/security/pc-security/bulletins/201208.aspx
1.先使用这个方法
regsvr32 /u mscomctl.ocx
regsvr32 mscomctl.ocx
针对 Windows 7 or 2008 - 运行 cmd.exe "使用管理员身份"
for 32bit Windows systems: regsvr32 c:\windows\system32\mscomctl.ocx
for 64bit Windows systems: regsvr32 c:\windows\syswow64\mscomctl.ocx
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx
%systemroot%\system32\regsvr32 mscomctl.ocx
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx
%systemroot%\sysWOW64#p#分页标题#e#\regsvr32 mscomctl.ocx
exit
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx
%systemroot%\system32\regsvr32 mscomctl.ocx
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx
exit
%systemroot%\system32\regsvr32 /u mscomctl.ocx /s
在2012年8月14日,微软发布了一个安装更新补丁,里面包含了Windows Common Control MSCOMCTL.OCX的更新:
文件名 | 文件版本 | 文件大小 | 日期 | 时间 |
Mscomctl.ocx | 6.01.9834 | 1,070,152 | 07-Jun-2012 | 03:59 |
注意这个控件的日期是6月份,但它是包含在这个8月份的安全补丁包中.
以下版本:
After installing the update, the Windows Common Control Library does not work. The issue seems to stem around a defective installation or registration of the OCX file. This update causes problems with existing Microsoft Access, VB6 and other applications using common controls such as the Treeview and Listbox controls.
The symptoms are rather odd. It's not as if the control is completely missing or not registered. The control exists but does not behave correctly as events are not firing correctly. For instance, the Treeview control don't issue NodeClick events, so any code that expects the expansion of a node to display or load more data fails. It took us a while to discover that a change in this control caused this problem.
In other cases, users are reporting that Microsoft Access locks up and crashes. People are also reporting problems with this in Visual Basic 6 (VB6) applications. Here are additional reports of issues associated with this patch.
This impacts our Total Access Analyzer product which displays the results of your Microsoft Access database documentation with the Treeview control. This error appears:
Error 459 - Object or class does not support the set of events, Procedure clsFrmExplorer_TAA.InitForm
If your PC received the security update and you're using the Microsoft Access 2010, 2007, 2003, 2002, or 2000 version of Total Access Analyzer, the Treeview control in our Database Explorer view no longer functions properly.
Microsoft has acknowledged problems with their security update that is causing these problems. The issue is caused by a registration of the updated MSCOMCTL.OCX file. Microsoft has released a Knowledgebase article 2687441 addressing this problem entitled: MS12-060: Description of the security update for 2007 Office system: August 14, 2012.
In that article, they mention the known issues with the security update:
Windows Common Control-based embedded ActiveX controls may fail to load within pre-existing office documents, within third-party applications, and when you insert new controls in developer mode. For example, depending on your operating system, you can type the either of the following commands at an elevated command prompt, and then press Enter:
- For 64-bit operating systems, type the following:
Regsvr32 "C:\Windows\SysWOW64\MSCOMCTL.OCX"- For 32-bit operating systems, type the following:
Regsvr32 "C:\Windows\System32\MSCOMCTL.OCX"
The article goes into details about unregistering the control and re-registering it using a batch file calling REGEDIT.EXE.
In our internal testing, we've discovered that the recommended steps don't work in most cases. Just unregistering and re-registering the control doesn't solve the problem. We tried adding a reboot between steps, but that didn't help either. The steps below work consistently. An technical explanation why is given at the end.
While there seems to be nothing physically wrong with the new OCX, we need to register another version to reset it. Here are the steps we discovered to manually repair this issue reliably and consistently:
You need Administrator rights to make registry changes. Depending on your operating system and Windows login rights, you may not be allowed to do this.
From your Windows Start button under, All Programs, Accessories, launch the Command Prompt by right clicking on it and choosing "Run as administrator".
You can then copy the Regsvr32.exe command lines described below into the dialog.
The 64-bit steps are identical to the 32 bit version except the folder is SYSWOW64 rather than SYSTEM32:
The reason why Microsoft's recommendation to un-register and re-register the new MSCOMCTL.OCX Common Control fails is because it doesn't overwrite the legacy control's registry on the machine. Industry colleague, Andrew Rohm provides this nice explanation:
The problem is that the update leaves some old 2.0 Version entries in the Registry. The previous MSCOMCTL.OCX carried the version number 2.0 (the *File* Version is 6.something but in the registry it's known as Version 2.0).
The new file version is 6.1.98.34 but Version 2.1 in the registry. Here we are talking about registry entry:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}
The patch installs the new version but leaves a part of the old registry settings.
By installing and uninstalling the legacy control, it cleans up the 2.0 registry so the new version is installed properly. The offending registry that needs to be deleted is:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0
We have the same problem. In our Add-In, we were able to trace the problem to a declaration of a variable as Excel.Application. The reference to this object is in the Excel.exe file, so it is very unclear as to which files got messed up.
The machines that have this problem were all updated early this morning (15 Aug 2012) with the following updates (sorry for not posting links, as a new user, I'm limited to only two per post):
Security Update for Microsoft Office 2007 suites (KB2596615)
Security Update for Microsoft Office 2007 suites (KB2596754)
Security Update for Microsoft Office 2007 suites (KB2596856)
Security Update for Microsoft Office 2007 suites (KB2687441)
Update for Microsoft Office Outlook 2007 Junk Email Filter (KB2687400)
Windows Malicious Software Removal Tool x64 - August 2012 (KB890830)
At present, we have not found any information on the MSDN site that could clear this up. We're still trying to isolate this down further.
Same issue here today after performing the update for Office 2007 Excel. Oddly, one system had no issues despite the update - the newest system. So after some inspection, I noticed this trouble-free system had different version of MSCOMCTL.OCX in windows\sysWOW64 then others. Here are the details of this activeX Size: 1,070,152 bytes created: 6/3/2012 modified: 6/6/2012 product version: 6.01.9834 So I copied this to the trouble one and it did the trick.
Also, you might want to check if these application extensions are present in windows\sysWOW64 or windows\system32 for 32-bit system FM20.DLL (Modified Date: 7/7/2011, version 12.0.6604.1000, 1.13MB) FM20ENU.DLL (Modified Date: 10/24/2008, version 12.0.6413.1000, 32.3KB) Not sure where you can download these. I cannibalized them from other systems.
5. 另一个有效的解决办法
This article applies to Word, Access, Excel and PowerPoint. MS12-060 is a security update that was released Tuesday, August 14, 2012. This update replaced MS12-027. You may now be seeing one of the following errors:
"Unspecified Automation Error" when running or compiling your Microsoft Office VBA code after installing MS12-060;
or
Alternatively, the manual fix for this problem is to re-register MSCOMCTL.OCX. To do this, follow these steps:
1. Open an administrative-level command prompt. The command prompt MUST be on the administrative level for this to work. Click START, and type RUN in the run command line. On Windows Vista and Windows 7 you will see CMD.EXE appear in the quick search list. Right click CMD.EXE and left click Run As Administrator. A black command prompt opens. On Windows XP, there is no built-in run-as-admin, but you can use the run as menu option (or runas command line) to execute an admin command from a Limited User Account.
2. If on a 64-bit machine, type the following:
regsvr32.exe /u C:\Windows\SysWOW64\MSCOMCTL.OCX
Hit ENTER
then type
regsvr32.exe C:\Windows\SysWOW64\MSCOMCTL.OCX
If on a 32-bit machine, type the following:
regsvr32.exe /u C:\Windows\System32\MSCOMCTL.OCX
hit ENTER
then type
regsvr32.exe C:\Windows\System32\MSCOMCTL.OCX
Your Office program should work again after doing this.
(Updated) 3. NOTE: The following step is done at your own risk. Microsoft doesn't know about any side effects to deleting this registry key. In cases where the re-registration doesn't work and you still get the error, you will need to open the registry editor (START > RUN > REGEDIT) and find and DELETE the following registry key:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0
to
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0OLD
We've heard reports that renaming the key doesn't work. The key has to be deleted.
Afterward, follow steps 1 and 2 to unregister and re-register MSCOMCTL.OCX
Automating a Solution for Multiple Machines
You can also include the unregistration and re-registration in a batch file that is pushed out to multiple machines. Here is a sample script which should do the job:
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx#p#分页标题#e#
%systemroot%\system32\regsvr32 mscomctl.ocx
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx
exit
If you require a batch file that runs silently, use the following:
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx /s
%systemroot%\system32\regsvr32 mscomctl.ocx /s
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx /s
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx /s
exit
Alternate Solution
See