Компонент ActiveX не может создать объект - PullRequest
33 голосов
/ 18 марта 2009

Я только что установил стороннее приложение на свой сервер Windows Server 2008 и я получаю

Компонент ActiveX не может создать объект

сообщение при попытке доступа с помощью CreateObject в VBScript.

Он определенно установлен и существует в разделе «Программы и компоненты». У кого-нибудь есть список вещей, которые я могу проверить, чтобы выяснить, что происходит?

Я сейчас попытался зарегистрировать DLL, используя regsvr32.exe /i bob.dll, как было предложено, но я получаю эту ошибку:

Модуль "Bob.dll" был загружен, но точка входа DllRegisterServer была не найден.

Убедитесь, что «Bob.dll» является допустимым файлом DLL или OCX, а затем повторите попытку.

Следует отметить, что это 32-разрядное приложение на 64-разрядной машине по адресу эта точка. Он также отлично работает на моей машине с 32-битной Windows XP.

Ответы [ 11 ]

44 голосов
/ 19 марта 2009

Оказывается, чтобы это приложение работало под VBScript, мне пришлось сделать две вещи.

  1. Запустите RegAsm.exe, чтобы зарегистрировать библиотеки DLL.
  2. Запустите C: \ Windows \ SysWOW64 \ cscript.exe, чтобы запустить мой VBScript.

Спасибо за вашу помощь.

ТАКЖЕ , если они не работают, посмотрите другой ответ здесь о включении 32-битных приложений.

38 голосов
/ 08 сентября 2011

Также стоит проверить, что для параметра «Включить 32-разрядные приложения» установлено значение «Истина» в дополнительных настройках DefaultAppPool в IIS.

10 голосов
/ 18 марта 2009

Приложение пытается создать объект COM, и даже если эта библиотека DLL существует, она может зависеть от другой библиотеки DLL, которая не установлена. Вы можете использовать DependencyWalker , чтобы узнать, так ли это.

5 голосов
/ 01 июня 2011

Также, когда вы регистрируете компонент, убедитесь, что вы используете 32-битную версию regsvr32.exe. Если вы просто запустите regsvr32.exe в командной строке с повышенными правами, по умолчанию будет использоваться стандартная 64-разрядная версия (которая, как ни странно, находится в C: \ Windows \ System32)

Версия, которая, по вашему мнению, вам нужна, находится в C: \ Windows \ SysWow64 \ regsvr32.exe

5 голосов
/ 25 августа 2010

Я знаю, что это старый вопрос, и ответ уже помечен как правильный, но это не помогло мне.

Если вы столкнетесь с такими проблемами в будущем, проверьте настройки браузера -

Для меня, используя IE, исправление состояло в том, чтобы перейти в Сервис / Свойства обозревателя, вкладка Безопасность, для соответствующей зоны, «пользовательский уровень» и проверить настройки ActiveX. Установка значения «Включить» для параметра «Инициализация и элементы управления ActiveX сценариев, не помеченных как безопасные для сценариев», позволила мне решить эту проблему

2 голосов
/ 18 марта 2009

Выглядит так, как будто объект, на который вы ссылаетесь, не зарегистрирован в системе. Я знаю, что вы сказали, что он установлен, но это не обязательно означает, что он зарегистрирован. Чтобы подтвердить это, найдите progID, который вы использовали в своем реестре.

Пример для этого кода:

set objFSO = CreateObject("Scripting.FileSystemObject") 

Я бы искал Scripting.FileSystemObject в реестре. Тогда я бы посмотрел на ключ реестра выше найденного значения, для значения InProcServer32. Это даст вам путь к файлу ActiveX, из которого он был зарегистрирован (для Scripting.FileSystemObject это файл "c: \ windows \ system32 \ scrrun.dll").

Если вы не можете найти свой progID в реестре, значит, он не зарегистрирован в вашей системе, что является вашей проблемой. Если он не зарегистрирован, вам нужно выяснить, какой файл его регистрирует (обычно это .ocx или .dll в том же пути к папке вашего стороннего приложения), а затем зарегистрировать эти файлы. Вот команда для регистрации файла:

regsvr32 /i "c:\windows\system32\scrrun.dll"

Даже если вы найдете значение progID в реестре и оно ссылается на файл, который присутствует в вашей системе, вы все равно можете попробовать перерегистрировать файл. Я обнаружил, что иногда где-то что-то нарушалось при регистрации, и было проще перерегистрировать файлы, чем исправлять проблему.

1 голос
/ 26 февраля 2015

Если это 32-битный COM / Active X, используйте 32-битную версию cscript.exe / wscript.exe, расположенную в C: \ Windows \ SysWOW64 \

0 голосов
/ 25 сентября 2018

У меня тоже была эта проблема. Я пытался запустить старую 32-битную DLL в 64-битной системе. Я получил его, скопировав .dll в каталог C: \ Windows \ SysWoW64 \ и запустив это:

%systemroot%\SysWoW64\regsvr32 "C:\Windows\SysWoW64\thenameofyourdll.dll"

А также , позволяющий IIS запускать 32-разрядные приложения

0 голосов
/ 06 апреля 2016

У меня была та же проблема с Excel, я пытался использовать 32 COM DLL с 64-битной версией Excel, и я получил эту ошибку. Я перестраиваю COM dll до 64-битной версии, и ошибка исчезает. Поэтому убедитесь, что ваш COM DLL имеет ту же архитектуру (x86 против x64), что и ваше приложение.

0 голосов
/ 06 февраля 2015

У меня была такая же проблема в программе VB6, которую я пишу, где Форма использует объект ScriptControl для запуска VBScripts, выбранных Пользователем.

Он работал нормально до того дня, когда внезапно начал отображать «Ошибка выполнения 429», когда VBScript попытался создать Scripting.FileSystemObject.

После сумасшедшего целого дня, испробовав все предложенные здесь решения, я начал подозревать, что проблема была в моем приложении.

К счастью, у меня была резервная версия этой формы: я сравнил их коды и обнаружил, что непреднамеренно установил для свойства UseSafeSubset моего объекта ScriptControl значение True.

Это было единственное отличие в форме, и после восстановления резервной копии это работало как чудо.

Надеюсь, это кому-нибудь пригодится. Долой VB6! : -)

Макс - Италия

...