com - SysWOW64\cscript或wscript中32位COM组件出现 "catastrophic failure"怎么解决

标签 com vbscript syswow64

我正在尝试运行一个 VBScript 脚本,该脚本使用了一个已有 7 年历史的第 3 方 32 位 COM 组件 在 Windows Server 2008 R2 上,命令行 32 位脚本宿主 SysWOW64\cscript.exe。当我在类上调用 CreateObject 时,它似乎是成功的,但是当我第一次尝试在对象上使用属性或方法(我尝试了几种不同的)时,它给了我“灾难性的失败”。我与 SysWOW64\wscript.exe 得到了相同的结果,当然,除了我的错误消息出现在 msgbox 而不是命令行窗口中。

我认为这与 64 位脚本宿主特别相关,原因如下:

  1. 等效的经典 ASP 脚本,调用相同的组件并使用 95% 的相同代码,在相同的服务器上正常工作,IIS 配置为支持 32 位 COM。
  2. 相同的 VBScript 在 32 位 Windows XP 机器和 32 位 Windows Server 2003 机器上都能正常工作。
  3. 该组件在我的 64 位 Windows 7 机器上以完全相同的方式失败。

我在 Google 上搜索此问题的解决方案时,大多发现了很多不同的问题,这些问题是通过将 COM 组件放入 Visual Studio 的工具栏中解决的。显然,该解决方案不适用于此处。

我的问题是:

  1. 在调用 COM 组件的 Windows 脚本宿主的“灾难性故障”背后是否始终存在核心问题?
  2. 在配置管理单元或注册表中是否有地方需要进行类似于我必须对 IIS 应用程序池进行的更改以“启用 32 位应用程序”?<
  3. Server 2008 R2 事件查看器中是否有一个我应该查看的常规位置,以查看是否有关于失败的更多详细信息,以防它特定于此组件?

提前致谢。

最佳答案

不要阅读错误文本中的任何内容。 “灾难性失败”一定是有史以来最糟糕的 HRESULT 代码。程序员使用了 E_UNEXPECTED 错误代码,这在 COM 编程中很常见。它通常表示“我无法完成这项工作,但我不知道为什么”。这当然不会让您有很多选择来找出原因。

它不太可能与在 64 位版本的 Windows 上运行直接相关。您正在使用 32 位脚本主机,它们在为 COM 服务器提供 32 位执行环境方面做得非常出色。更有可能的是安装有问题,缺少某种组件。查明真相的唯一好方法是联系 COM 服务器的作者或供应商以获得支持。如果这不切实际,请考虑在启动早期版本 Windows 的虚拟 PC 中运行它。

关于com - SysWOW64\cscript或wscript中32位COM组件出现 "catastrophic failure"怎么解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405932/

相关文章:

error-handling - VBScript CopyFile报告错误53未找到文件,但已成功复制文件

.net - 无法访问 VBA 中的 COM 公开方法

c++ - 视觉 C++ : InvokeHelper() function

.net - COM 注册 : does location matter?

.net - .NET Core 中是否有 System.Runtime.InteropServices.Marshal.GetActiveObject() 的替代品?

excel - 我可以使用 VBScript 来获取现有的 CSV 并将它们制作成单个 Excel 工作簿的选项卡吗?

vbscript - 批量关闭大写锁定 - 替代方案

.net - 如何从 32 位进程启动 64 位进程

c# - 从 32 位代码在 System32 中运行 64 位可执行文件

windows - C :\windows\SysWow64\CScript. 弹出exe窗口