2009-03-18 2 views
28

Я только что установили приложение стороннего на моем Windows Server 2008 сервер и я получаю сообщениеActiveX компонент не может создать объект

ActiveX Component can't create object

, когда я пытаюсь получить доступ с помощью в VBScript в CreateObject.

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

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

The Module "Bob.dll" was loaded but the entry-point DllRegisterServer was not found.

Make sure that "Bob.dll" is valid DLL or OCX file and then try again.

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

+0

Быстрое ... Уверены ли вы, что у вас есть правильная передача? –

ответ

38

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

  1. Запустить RegAsm.exe для регистрации DLL.
  2. Запустите C: \ Windows \ SysWOW64 \ cscript.exe для запуска моего VBScript.

Благодарим за помощь.

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

+2

Спасибо за этот! –

+3

Хорошее сохранение! Последние восемь минут я бил головой об этом. Я несколько расстроен из-за отсутствия полезных сообщений об ошибках от 32-битного интерпретатора. – Eric

+0

@JeroenLandheer, сделайте его более похожим на 2 часа: P – Carlos

9

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

2

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

5

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

Для всех бедных душ ближайших этого пути в будущем, проверьте ваш браузер Настройки-

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

+0

, но это заставит его работать в вашем браузере ... вы не можете ожидать, что все пользователи сделают это, чтобы использовать ваш веб-сайт, так ли это не бесполезно? –

+0

Для многих приложений это было бы бесполезно. Но, например, в нашей среде наше приложение для браузера используется только в нашей компании, поэтому мы контролируем настройки. (Это старая программа, не обязательно оптимальная, но она работает.) – Jemmeh

5

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

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

+1

Спасибо за напоминание; имела схожую ситуацию с OP, и ваш комментарий помог мне. –

+0

Это исправление, которое отсортировало проблему для меня и намного быстрее, чем другие решения, чтобы попробовать также –

36

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

+8

Жаль, что я не смог бы проголосовать за это больше! –

+0

Это сработало для меня. –

+1

Я согласен с @LeeEnglestone. В Advances Settings> (General)> Enable 32-Bit Applications –

0

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

Set objFSO = CreateObject("Scripting.FileSystemObject") 

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

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

и работает

0

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

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

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

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

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

Надеюсь, это может быть полезно кому-то. С VB6! :-)

Max - Италия

1

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

0

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