首页 文章

ActiveX组件无法创建对象

提问于
浏览
33

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

ActiveX组件无法创建对象

尝试使用VBScript中的 CreateObject 进行访问时出现错误消息 .

它肯定已安装并存在于“程序和功能”下 . 有没有人有一个我可以检查的事项清单,以弄清楚发生了什么?

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

模块“Bob.dll”已加载但未找到入口点DllRegisterServer . 确保“Bob.dll”是有效的DLL或OCX文件,然后再试一次 .

我应该注意到,这是64位计算机上的32位应用程序 . 它也可以在我的机器上运行,这是Windows XP 32位 .

11 回答

  • 44

    事实证明这个应用程序在VBScript下工作,我不得不做两件事 .

    • 运行RegAsm.exe以注册DLL .

    • 运行C:\ Windows \ SysWOW64 \ cscript.exe以运行我的VBScript .

    感谢你的帮助 .

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

  • 0

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

  • 1

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

  • 0

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

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

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

  • 0

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

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

  • 0

    它看起来好像你引用的对象没有在系统上注册 . 我知道你说它已安装,但这并不一定意味着它已经注册 . 要确认这一点,请搜索您在注册表中使用的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值并且它引用了系统中存在的文件,您仍可能希望尝试重新注册该文件 . 我发现,有时注册会在某处以某种方式被破坏,重新注册文件会更容易解决问题 .

  • 2

    如果是32位COM / Active X,请使用位于C:\ Windows \ SysWOW64中的32位cscript.exe / wscript.exe

  • 10

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

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    

    解:
    打开命令行,运行:

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

    它的工作原理

  • 5

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

    它工作正常,直到有一天,当VBScript试图创建一个Scripting.FileSystemObject时突然开始显示“运行时错误429” .

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

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

    这是形式的唯一区别,在恢复备份副本后,它就像一个魅力 .

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

    最大 - 意大利

  • 5

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

  • 38

    我也有这个问题 . 我试图在64位系统中运行一个旧的32位dll . 我通过将.dll复制到C:\ Windows \ SysWoW64 \目录并运行它来实现它:

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

    而且enabling IIS to run 32 bit apps

相关问题