如何使用 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文件的原因?