如何使用 SysWOW64\cscript 或 wscript 中的 32 位 COM 组件解决“灾难性故障”

Posted

技术标签:

【中文标题】如何使用 SysWOW64\\cscript 或 wscript 中的 32 位 COM 组件解决“灾难性故障”【英文标题】:How to solve "catastrophic failure" with 32-bit COM component in SysWOW64\cscript or wscript如何使用 SysWOW64\cscript 或 wscript 中的 32 位 COM 组件解决“灾难性故障” 【发布时间】:2010-03-09 00:54:23 【问题描述】:

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

我认为这与 64 位脚本主机有关,原因如下:

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

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

我的问题是:

    Windows 脚本主机调用 COM 组件时是否存在始终导致“灾难性故障”的核心问题? 在配置管理单元或注册表中是否有需要进行更改的地方,类似于我必须对 IIS 应用程序池进行的更改以“启用 32 位应用程序”?李> Server 2008 R2 事件查看器中是否有一个我应该查看的通用位置,以查看是否有更多关于故障的详细信息,以防它被证明是特定于该组件的?

提前致谢。

【问题讨论】:

我想我可能提出了有史以来最没有吸引力的问题。可能应该在主题行中少放一些信息,比如一张约会网站的照片,你只能看到对方的耳朵。在 *** 的黄金时段,我从来没有去过整个第一个小时——之前只有 6 次观看。太棒了。 【参考方案1】:

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

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

【讨论】:

以上是关于如何使用 SysWOW64\cscript 或 wscript 中的 32 位 COM 组件解决“灾难性故障”的主要内容,如果未能解决你的问题,请参考以下文章

从系统(SysWOW64)目录外部注册 32 位 COM 时出现问题

“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开PDB文件的原因?

VS2012 每次编译程序都会出现3个无法查找或打开 PDB 文件。

如何安装ocx控件

如何安装后缀为ocx的控件

如何将执行命令从 bash 脚本转换为 C?或如何在“W”模式下正确使用 popen()?