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

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

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

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

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

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

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

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

Я должен отметить, что на данный момент это 32-битное приложение на 64-битной машине. Это также отлично работает на моей машине, которая является Windows XP 32-битной.

11 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Это действительно выглядит так, как будто объект, на который вы ссылаетесь, не зарегистрирован в системе. Я знаю, что вы сказали, что он установлен, но это не обязательно означает, что он зарегистрирован. Чтобы подтвердить это, найдите 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 в реестре и оно ссылается на файл, который присутствует в вашей системе, вы все равно можете попробовать перерегистрировать файл. Я обнаружил, что иногда где-то что-то нарушалось при регистрации, и было проще перерегистрировать файлы, чем решать проблему.

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

Я знаю, что это старый поток, но проверял ли кто-нибудь, блокирует ли их антивирус Win32API и сценарии в их системах? В моей офисной системе установлен CylanceProtect, и я обнаружил, что возникают те же проблемы, что и другие. Это можно подтвердить, если вы проверите журналы Windows в средстве просмотра событий.

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

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

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

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

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

Надеюсь, что это может быть полезно для кого-то. Долой VB6!:-)

Макс - Италия

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

Я также встречаю ту же ошибку в VBScript.

Set objFSO = CreateObject("Scripting.FileSystemObject")

Решение:
Откройте командную строку, запустите:

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

и это работает

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

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

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

Другие вопросы по тегам