ActiveX组件无法创建对象

时间:2009-03-18 04:09:43

标签: dll vbscript activex windows-server-2008 dllregistration

我刚在Windows Server 2008服务器上安装了第三方应用 我得到了

  

ActiveX组件无法创建对象

当我尝试使用VBScript中的CreateObject访问时

消息。

它已经安装并存在于“程序和功能”下。有没有人列出我可以检查的东西,以弄清楚发生了什么?

我现在尝试按照建议使用regsvr32.exe /i bob.dll注册DLL但我收到此错误:

  

模块“Bob.dll”已加载,但入口点DllRegisterServer已加载   没找到。

     

确保“Bob.dll”是有效的DLL或OCX文件,然后重试。

我应该注意到这是64位计算机上的32位应用程序 这点。它在我的机器上运行正常,它是Windows XP 32位。

12 个答案:

答案 0 :(得分:44)

事实证明这个应用程序在VBScript下运行,我不得不做两件事。

  1. 运行RegAsm.exe以注册DLL。
  2. 运行C:\ Windows \ SysWOW64 \ cscript.exe以运行我的VBScript。
  3. 感谢您的帮助。

    如果这些不起作用,请查看有关启用32位应用程序的其他答案here

答案 1 :(得分:38)

在IIS中的DefaultAppPool的高级设置中,您还可以检查是否已将“启用32位应用程序”设置为True。

答案 2 :(得分:10)

该应用程序正在尝试创建COM对象,即使该COM DLL存在,它也可能依赖于未安装的另一个DLL。您可以使用DependencyWalker查看是否属于这种情况。

答案 3 :(得分:5)

我知道这是一个老问题,已经有一个标记为正确的答案,但这对我没有帮助。

对于将来以这种方式出现的任何可怜的灵魂,请检查您的浏览器设置 -

对我来说,使用IE,修复方法是进入工具/ Internet选项,安全选项卡,相关区域,“自定义级别”并检查ActiveX设置。将“未标记为可安全编写脚本的ActiveX控件初始化并编写脚本”设置为“启用”可以解决此问题

答案 4 :(得分:5)

另外,当您注册组件时,请确保使用32位版本的regsvr32.exe。 如果您只是在提升的提示符下运行regsvr32.exe,它将默认采用标准的64位版本(奇怪的是它位于C:\ Windows \ System32中)

我相信你需要的版本位于C:\ Windows \ SysWow64 \ regsvr32.exe

答案 5 :(得分: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值并且它引用了系统中存在的文件,您仍可能希望尝试重新注册该文件。我发现有时注册会在某处以某种方式被破坏,重新注册文件会更容易解决问题。

答案 6 :(得分:1)

如果是32位COM / Active X,请使用位于C:\ Windows \ SysWOW64 \

中的32位cscript.exe / wscript.exe

答案 7 :(得分:0)

我在vbscript中也遇到了同样的错误。

Set objFSO = CreateObject("Scripting.FileSystemObject")

解决方案:
打开命令行,运行:

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

并且有效

答案 8 :(得分:0)

我在编写的VB6程序中遇到了同样的问题,其中Form使用ScriptControl对象来运行用户选择的VBScripts。

直到前几天才突然开始显示'运行时错误429'当VBScript试图创建Scripting.FileSystemObject时。

在疯了一整天,尝试了这里提出的所有解决方案后,我开始怀疑问题出在我的申请中。

幸运的是,我有一个该表单的备份版本:我比较了他们的代码,并发现我无意中将ScriptControl对象的UseSafeSubset属性设置为True。

这是表单中的唯一区别,在恢复备份副本后,它就像魅力一样。

希望这对某人有用。用VB6! : - )

Max - 意大利

答案 9 :(得分:0)

我遇到了与Excel相同的问题,我试图使用带有Excel 64位版本的32 COM DLL,我收到了此错误。我将COM dll重建为64位版本,错误消失。因此,请确保您的COM dll具有与应用程序相同的体系结构(x86 vs x64)。

答案 10 :(得分:0)

我也有这个问题。我试图在64位系统中运行旧的32位dll。我通过将.dll复制到C:\ Windows \ SysWoW64 \目录并运行以下文件来使其工作:

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

还有 enabling IIS to run 32 bit apps

答案 11 :(得分:0)

我知道这是一个旧线程,但是是否有人检查他们的防病毒软件是否阻止了他们系统上的Win32API和脚本?我在办公室系统上安装了CylanceProtect,发现与其他人列出的问题相同。如果您在事件查看器中选中Windows日志,则可以确认这一点。