3

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

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

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

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

我的问题是:

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

提前致谢。

4

1 回答 1

3

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

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

于 2010-03-09T03:43:04.340 回答