Ошибка DllRegisterServer для comct332.ocx

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

«Компонент 'ComCt332.ocx' или одна из его зависимостей неправильно зарегистрированы: файл отсутствует или недействителен».

Чтобы решить эту проблему, я попытался зарегистрировать файл comct332.ocx, запустив regsvr32 в командной строке в режиме администратора, но затем получаю сообщение об ошибке:

«Модуль comct332.ocx был загружен, но вызов DllRegisterServer завершился неудачно с кодом ошибки 0x80004005»

Другие вещи, которые я пробовал, включают:

  • Удаление всех родительских узлов в реестре, где существует comct332.ocx, и повторный запуск regsvr32 в режиме администратора. Тот же результат.

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

Мы будем очень благодарны за любую помощь, мысли, другие попытки. Спасибо


person Deisou    schedule 20.08.2012    source источник


Ответы (1)


Если вы продолжали делать то, что вам нужно, если вы собираетесь продолжать успешно использовать VB6, вы должны знать несколько вещей.

  • Одним из них является влияние UAC и виртуализации реестра для отдельных пользователей.

  • Другой фактор - это влияние перенаправления реестра SysWOW на 64-битные системы.

Вы поймете, что правильные установочные пакеты важнее, чем когда-либо прежде. В Windows есть много автоматических исправлений для устаревшего программного обеспечения, но некоторые из них не приведут к тому, что приложения будут иметь все изначально запланированное поведение. Большинство из них будут применяться только тогда, когда ваше приложение «следует правильным путем» от установки до второго запуска.

Здесь у нас есть случай, который предназначен для обработки с помощью надлежащего пакета установщика Windows или, по крайней мере, устаревшей установки, распознаваемой как таковая с помощью «эвристики обнаружения устаревшего установщика» Windows. Как правило, устаревшие сценарии установки не рекомендуются, но пока они остаются на пути, Windows прилагает усилия, чтобы обеспечить их успех.

Развертывание вручную путем простого копирования нескольких файлов и случайного запуска regsvr32 на некоторых из них снижает шансы на успех. В любом случае это никогда не был одобренным методом развертывания.

Скорее всего, вы столкнулись с некоторой комбинацией виртуализации реестра и перенаправления.

Утилита regsvr32 - это средство разработки, а не средство развертывания. Если вы настаиваете на попытке использовать его для развертывания, вы должны следовать тем же правилам, которым должен следовать разработчик:

  • Запустите правильную версию. В 64-битной системе есть как 64-, так и 32-битные версии этой утилиты. 32-разрядная версия, которую вы должны использовать, находится в папке SysWOW64.

  • Запустите его из командной строки с повышенными привилегиями. Самый простой способ начать - набрать <Winkey>cmd.exe<Ctrl-Shift-Enter>, а затем утвердить приглашение UAC или предоставить учетные данные администратора через плечо, если это необходимо.

Есть много других вещей, которые вам нужно знать и с которыми вам нужно справиться, чтобы добиться успеха. Если вы их проигнорировали, большинство из них станет для вас очевидным только после того, как ваша программа будет установлена ​​и запустится. Многие из них связаны с виртуализацией файловой системы.

person Bob77    schedule 20.08.2012
comment
Спасибо за информацию. Чтобы добавить путаницы, когда я вошел на тот же компьютер с другой учетной записью и установил тот же MSI, он сразу же заработал без запуска regsvr32 вручную. Однако в качестве теста я все равно запустил его, и он зарегистрировал comct332.ocx без ошибок. Ручное вмешательство в развертывание этого файла происходит только потому, что приложение выходит из строя с первой ошибкой в ​​моем сообщении сразу после его успешной установки. - person Deisou; 20.08.2012
comment
Что ж, это не совсем проясняет ситуацию. Вы говорите, что установили свой MSI, тогда он работал без запуска regsvr32. Что это было - MSI? Запуск приложения? Затем он регистрирует comct332.ocx без ошибок. Что это - что-то еще? - person Bob77; 20.08.2012
comment
Мое плохое, давай проясним. В рабочей учетной записи / профиле я могу установить MSI и запустить фактическое приложение без каких-либо ошибок и вообще не использовать regsvr32. - person Deisou; 21.08.2012
comment
Для любой учетной записи, на которой запущен MSI, должно отображаться приглашение UAC либо для простого утверждения, либо для ввода административных учетных данных через плечо. Это, конечно, предполагает, что вы создали это как MSI для каждой машины, а не как для пользователя MSI, и что вы не изменили настройки UAC. Вы добавляли ALLUSERS=1 в Properties таблицу базы данных MSI? Если вы используете Visual Studio (VSI 1.1 и т. Д.), Отредактируйте MSI с помощью Orca.exe после его создания, чтобы добавить это свойство. - person Bob77; 21.08.2012
comment
Привет боб. Я выполнил ваши инструкции, и теперь приложение работает. Я добавил свойство ALLUSERS в MSI, удалил MSI из всех профилей на этом ПК и переустановил MSI из рабочего профиля. После этого, когда я зашел в профиль, где приложение не работало, оно теперь загружается без жалоб. Большое большое спасибо ! - person Deisou; 22.08.2012
comment
Отличные новости. Вы также можете запустить MSIEXEC из командной строки, указав значение свойства, как в MsiExec.exe /I XYZ.msi ALLUSERS=1, когда пакет был неправильно создан как для каждого пользователя, не указав это свойство. По какой-то странной причине это кажется довольно обычным явлением. См. Также msdn.microsoft.com / ru-ru / library / windows / desktop / - person Bob77; 22.08.2012