Подтвердить что ты не робот

VB6 IDE не может загрузить MSCOMCTL.OCX после обновления KB 2687323

После обновления Windows обновлено обновление безопасности KB2687323, мой проект VB6 не загружается. Отображаемое сообщение об ошибке: "[project_vbp_path]/MSCOMCTL.OCX" не может быть загружен - Продолжить загрузку проекта? ". Обратите внимание, что путь в messeage - это путь к папке файла vbp вместо зарегистрированного пути управления.

Подробнее:

  • MSCOMCTL.OCX зарегистрирован в обычной папке system32.
  • Исполняемый файл, созданный точно таким же проектом за час до обновления, отлично работает и загружает обновленный MSCOMCTL.OCX(я проверил его с помощью Process Explorer).

В описании обновления безопасности указано, что MSCOMCTL.OCX имеет новую фиксированную версию. Поэтому я проверил свойства проекта для "Обновление элементов управления ActiveX". Я пробовал это в обоих направлениях; проверяется и не проверяется безрезультатно. VB6 IDE отказался загружать обновленный OCX.

4b9b3361

Ответ 1

После нескольких часов усилий, восстановления системы, регистрации, отмены регистрации циклов и ночного сна мне удалось точно определить проблему. Оказывается, файл проекта содержит следующую строку:

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 с помощью блокнота, чтобы увидеть, какую версию он ожидает.


ИЛИ МНОГО ЛЕГКОГО МЕТОДА:

(Я добавил этот раздел после ценного комментария Боба ниже)

Вы можете открыть файл проекта VBP в Блокноте и найти неприятную строку, которая не позволяет VB6 автоматически обновить проект до версии 2.1 и удалить его:

NoControlUpgrade=1

Ответ 2

Проблема решена, выполнив следующее в командной строке с повышенными правами:

:

cd C:\Windows\System32\
regtlib msdatsrc.tlb

или

cd C:\Windows\SysWOW64\
regtlib msdatsrc.tlb

Надеюсь, это поможет.

Ответ 3

Эта проблема:

Продукты Microsoft Office 2010 (или более поздние) устанавливают обновления, которые нарушают совместимость MSCOMCTL.ocx и COMCTL32.ocx. К сожалению, это влияет на многие другие программы, такие как Visual Basic 6 SP6 и даже Oracle Virtual Box v5. Фактическая проблема - это ключ реестра HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0. Вы можете найти подробную информацию об этой проблеме здесь.

Вот еще одно рабочее решение:

Решение предполагает, что вы не повредили свой реестр, удалив, заменив и повторно зарегистрировав MSCOMCTL.ocx и COMCTL32.ocx без отмены регистрации файлов исправлений Office.

Создайте пакетный файл с именем fix.cmd и поместите в него следующие команды:

regsvr32 /s /u %windir%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx
del /y %windir%\SysWOW64\comctl32.ocx
del /y %windir%\SysWOW64\mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%\SysWOW64\msdatsrc.tlb

Загрузите из обновления безопасности для Visual Basic 6.0 с пакетом обновления 6: 14 августа 2012 г. msi файл и переименуйте его в KB2708437.msi.

Примечание. Прямая ссылка на загрузку пакета обновления 6 находится ЗДЕСЬ.

Запустите fix.cmd, и проблема будет исправлена!

Fix.cmd выполняет правильную отмену регистрации, а затем удаляет текущие файлы MSCOMCTL.ocx и COMCTL32.ocx, а затем применяет последнее исправление накопительного пакета Visual Basic 6 SP6. Фактически, сценарий принудительно устанавливает исправление, а затем переустанавливает его, обновляя каждый файл независимо от версии. Наконец, он регистрирует библиотеку типов msdatsrc.tlb.

Пожалуйста, дайте мне знать, если это работает для вас.

================================================== ====================

Расширенное решение:

Однако, если вы случайно повредили свой реестр, вам нужно получить как можно больше версий MSCOMCTL.ocx и COMCTL32.ocx. Затем вам нужно начать с более новой версии, вернуться к старой, зарегистрировать и отменить регистрацию файлов OCX.

Последняя версия MSCOMCTL.ocx: 6.1.98.39 (v2.1) от мая 2012 года, которая, скорее всего, установлена в вашей системе и вызывает все ваши проблемы.

Самая старая (устаревшая) версия - это версия Visual Basic 6, выпущенная в 1998 г. 6.1.97.82 (v2.0), или версия, выпущенная в более раннем пакете обновления 6.1.97.86 в апреле 2005 г.

Пример:

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%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx

del /q %windir%\SysWOW64\comctl32.ocx
del /q %windir%\SysWOW64\mscomctl.ocx

msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi

regtlib %windir%\SysWOW64\msdatsrc.tlb   

ПРЕДУПРЕЖДЕНИЕ:

Не ищите в Интернете эти файлы. Чтобы найти другую версию файлов OCX, скачайте и распакуйте официальные пакеты установщика Microsoft, такие как:

Апрель 2005 - Microsoft KB896559

2008 декабрь - Microsoft KB926857

Апрель 2009 - Microsoft KB957924

Май 2012 - Microsoft KB2708437

Также рекомендуется запустить CCleaner версии 4.0 или новее, чтобы исправить любые другие проблемы, связанные с ActiveX на вашем компьютере.

Ответ 4

Чтобы устранить проблему:

Сделайте пакетный файл со следующим кодом:

@echo off
reg query "HKEY_CLASSES_ROOT\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.1"
if %errorlevel%==0 GOTO DELREGKEY
if %errorlevel%==1 GOTO REGISTEROCX

:DELREGKEY
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f

:REGISTEROCX
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

Ответ 5

Я использую win7 и имеет такую ​​же проблему. Сегодня я решил эту проблему, загрузив много ошибок с моим проектом, просто дайте заказ продолжить после этого goto Project = > Component = > Microsoft Windows Common Controls 6.0 (SP6), затем сохраните проект (использование файла было c:\windows\syswow64\mscomctl.ocx)

Ответ 6

Решение для меня - установить этот патч VB6. Я на сервере2008 (32-разрядный).

http://www.microsoft.com/en-us/download/details.aspx?id=10019

Мне грустно, что мы все еще говорим об этом в 2014 году... но вот оно.:)


Из комментария puetzk: они устарели: вы хотите использовать Microsoft Visual Basic 6.0 с пакетом обновления 6 Накопительное обновление (kb957924).

Ответ 7

На некоторых компьютерах я обнаружил, что версия "2.0" MSCOMCTL.OCX была добавлена ​​в список ActiveX KillBits, и поэтому управление не будет разрешено загружать или запускать - даже в режиме проектирования. Обновление до версии "2.1" решит это и является рекомендуемым решением.

В критических случаях, когда вы должны запускать программу "сейчас" или у вас нет доступа к исходному коду, или элемент управления используется 400 раз в большом модульном проекте, вы можете использовать "большой молот", и обновить реестр, чтобы снова включить элемент управления:

**
ПРЕДУПРЕЖДЕНИЕ. Неправильное редактирование реестра Windows может повредить вашему компьютеру. Если вы не знаете, что делаете, оставьте его в покое или получите образование, прежде чем продолжить.
**

Очистить KillBit:

  • Запустить редактор реестра (regedit.exe или regedt32.exe)
  • В левой панели перейдите к клавише HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Совместимость {BDD1F04B-858B-11D1-B16A-00C0F0283628}
  • В правой панели дважды щелкните "Флаги совместимости", измените значение с Hex 0x400 (Decimal 1024) на 0, затем нажмите "ОК".
  • Запустите приложение, которое использует версию 2.0 для MSCOMCTL.OCX; он должен работать как сконструированный.

Список ActiveX KillBits предназначен для того, чтобы предоставить Microsoft возможность отключить элементы управления, которые считаются угрозой безопасности, и они разработали механизм, чтобы список ActiveX KillBits был повторно применен к системе по-видимому случайным раз, в дополнение к тому, когда установлено обновление, поэтому вам нужно будет запланировать повторное применение изменения реестра. Создание файла слияния с реестром работает очень хорошо, но это не то, что вы хотите делать каждый раз, когда приложение запускается, потому что это не тихий процесс (есть способы сделать это тихо, используя сценарии Windows, но вам придется узнать, что на вашем своя). KillBit проверяется только тогда, когда элемент управления запрашивается приложением, поэтому вы можете сбрасывать его после запуска приложения и загрузки элемента управления.

Ответ 8

Вы можете попробовать проверить свой реестр

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib {831FDD16-0C5C-11D2-A9FC-0000F8754DA1}

Если это версия версии 2.1, это приведет к невозможности загрузить проблему MSCOMCTL.OCX.

Вы можете восстановить до 2.0 verion (не только скопировать файл, вы должны unregiser 2.1 и зарегистрировать восстановленный файл)

или

Вы можете попробовать последнюю версию версии 2.2

Некоторая информация о версии:

  • 6.0.88.62 (2.0)
  • 6.1.97.82 (2.0)
  • 6.1.98.34 (2.1) < не работает для меня
  • 6.1.98.46 (2.2)

Ответ 9

Аналогичная проблема с макросами VBA с использованием MSCOMCTL.OCX. Проблема все еще не решена с помощью таких решений, как "reg/unreg mscomctl.ocx" Использовал Информацию выше Руми. Отредактированный мой *.dot файл, найдите # 2.0 # 0, измените его на # 2.1 # 0 - > он работал

Ответ 10

Я не нахожу NoControlUpgrade=1 в своем проекте vbp. Вместо этого я разрабатываю как на 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

Я только что изменил #2,1 на #2.0 в файле vbp, и он может запускаться немедленно. Раньше такие проблемы возникали, так что надейтесь, что Microsoft объяснит и решит их соответственно. Спасибо.

Ответ 11

У меня была эта проблема и я попробовал много разных решений. Они не работали для меня, хотя я думаю, что эта ошибка возникает по нескольким причинам. Мое решение в моем ответе на этот вопрос здесь:

fooobar.com/questions/155396/...

Его стоит попробовать, если для вас ничего не работает.

Ответ 12

Эта проблема загадочно появилась для меня сегодня. Я не делал никаких обновлений Windows, поэтому я не знаю причину.

Это исправлено (в командной строке с повышенными значениями):

regtlibv12.exe msdatsrc.tlb

Ответ 13

Недавно я положил весь свой источник на окно 8 32. Если проблемы загружаются mscomctl.ocx с существующими проектами.

Я создал новый проект и добавил общий элемент управления (все). сохранить проект и перезагрузить его без проблем.

когда вы сравниваете заголовки проектов с новыми и старыми, старый использует reference = *\blah blah. Я обнаружил, что удаление этой замены с помощью Object = {blah} устранило проблему.

Ответ 14

Для меня это решение работало как шарм: 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` 

Ответ 15

У меня по-прежнему возникали проблемы после того, как я попробовал предлагаемые здесь вещи. В итоге оказалось, что у меня была неправильная версия mscomctl.ocx в моей папке SysWOW64. Я нашел следующие версии:

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) решило эту проблему для меня.

Ответ 16

У меня были аналогичные проблемы, у меня была программа, запущенная в течение последних 10 лет, написанная на VB6, теперь клиент хотел внести некоторые серьезные изменения, и все мои машины, которые сейчас являются Windows 10; не удалось открыть проект, это всегда была такая неприятная ошибка mscomctl.ocx. Я многое сделал, но не смог решить проблему. Затем я подумал, что проще, я скачал последнюю версию mscomctl (mscomctl.ocx Затем открыл новый проект, добавил все компоненты, такие как mscomctl, activx и т.д., Сохранил его и открыл этот недавно созданный файл проекта в Блокноте, затем скопировал точный детали и заменены в оригинальном проекте.... и бинго! Старый проект открылся нормально без суеты! Я надеюсь, что этот опыт кому-то поможет.