代码之家  ›  专栏  ›  技术社区  ›  ddimitrov

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

  •  3
  • ddimitrov  · 技术社区  · 14 年前

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

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

    1. 等效的经典ASP脚本调用相同的组件并使用95%的相同代码,在相同的服务器上正常工作,并且将IIS配置为支持32位COM。
    2. 相同的vbscript在32位Windows XP计算机和32位Windows Server 2003计算机上正常工作。
    3. 在我的64位Windows7机器上,该组件以完全相同的方式出现故障。

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

    我的问题是:

    1. 是否有一个核心问题总是由调用COM组件的Windows脚本主机的“灾难性失败”造成的?
    2. 配置管理单元或注册表中是否有一个位置需要进行类似于对“启用32位应用程序”的IIS应用程序池所做的更改?
    3. 在Server2008r2事件查看器中是否有我应该查看的一般位置,以查看是否有关于故障的更多详细信息,以防它被证明是特定于此组件的?

    事先谢谢。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Hans Passant    14 年前

    不要读取错误文本中的任何内容。““灾难性故障”必须是有史以来最糟糕的命名hresult代码。编程器使用了e_意外错误代码,这在COM编程中很常见。它通常表示“我做不到,但我不知道为什么”。这当然不会让你有很多选择来找出原因。

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