36

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

ActiveX 组件无法创建对象

当我尝试CreateObject在 VBScript 中使用 a 访问时出现消息。

它肯定已安装并存在于“程序和功能”下。有没有人列出我可以检查以了解发生了什么的事情?

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

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

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

我应该注意,此时这是 64 位机器上的 32 位应用程序。它在我的 Windows XP 32 位机器上也能正常工作。

4

12 回答 12

50

事实证明,要让这个应用程序在 VBScript 下运行,我必须做两件事。

  1. 运行 RegAsm.exe 以注册 DLL。
  2. 运行 C:\Windows\SysWOW64\cscript.exe 来运行我的 VBScript。

如果这些不起作用,请在此处查看有关在 IIS 中启用 32 位应用程序的其他答案。

于 2009-03-18T21:00:50.173 回答
40

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

于 2011-09-08T08:06:34.037 回答
10

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

于 2009-03-18T04:29:58.763 回答
6

检查您的浏览器设置。

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

于 2010-08-25T06:27:27.933 回答
5

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

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

于 2011-06-01T14:10:56.523 回答
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 值并且它引用了系统上存在的文件,您可能仍想尝试重新注册该文件。我发现有时注册在某处被破坏了,重新注册文件比解决问题更容易。

于 2009-03-18T15:42:56.943 回答
2

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

于 2015-02-26T19:10:15.207 回答
1

I know this is an old thread, but has anyone checked if their Antivirus is blocking Win32API and Scripting on their systems? I have CylanceProtect installed on my office system and i found the same issues occurring as listed by others. This can be confirmed if you check the Windows Logs in Event Viewer.

于 2019-08-27T10:01:17.580 回答
0

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

Set objFSO = CreateObject("Scripting.FileSystemObject")

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

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

它有效

于 2012-07-09T08:02:12.440 回答
0

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

它工作正常,直到前几天,当 VBScript 尝试创建 Scripting.FileSystemObject 时,它突然开始显示“运行时错误 429”。

在疯狂了一整天,尝试了这里提出的所有解决方案之后,我开始怀疑问题出在我的应用程序中。

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

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

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

马克斯 - 意大利

于 2015-02-06T08:43:36.640 回答
0

我在使用 Excel 时遇到了同样的问题,我试图将 32 COM DLL 与 Excel 64 位版本一起使用,但我得到了这个错误。我将 COM dll 重建为 64 位版本,错误消失了。因此,请确保您的 COM dll 与您的应用程序具有相同的架构(x86 与 x64)。

于 2016-04-06T12:54:21.827 回答
0

I had this problem too. I was trying to run an old 32-bit dll in a 64 bit system. I got it working by copying the .dll to the C:\Windows\SysWoW64\ directory and running this:

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

And also enabling IIS to run 32 bit apps

于 2018-09-25T14:20:59.270 回答