3

コマンドラインの32ビットスクリプトホストであるSysWOW64\cscript.exeを使用して、Windows Server2008R2で7年前のサードパーティの32ビットCOMコンポーネントを使用するVBScriptスクリプトを実行しようとしています。クラスでCreateObjectを呼び出すと、成功しているように見えますが、オブジェクトでプロパティまたはメソッドを初めて使用しようとすると(いくつかの異なるものを試しました)、「壊滅的な失敗」が発生します。SysWOW64 \ wscript.exeでも同じ結果が得られますが、もちろん、エラーメッセージがコマンドラインウィンドウではなくmsgboxに表示される点が異なります。

これは、次の理由から、特に64ビットスクリプトホストに関係していると思います。

  1. 同じコンポーネントを呼び出し、同じコードの95%を使用する、同等のクラシックASPスクリプトは、32ビットCOMをサポートするように構成されたIISを使用して、同じサーバーで正しく機能します。
  2. 同じVBScriptは、32ビットのWindowsXPマシンと32ビットのWindowsServer2003マシンで正しく機能します。
  3. コンポーネントは、64ビットのWindows7マシンでもまったく同じように失敗します。

この問題の解決策をGoogleで検索したところ、ほとんどの場合、COMコンポーネントをVisualStudioのツールバーに配置することで解決されたさまざまな問題が見つかりました。明らかに、その解決策はここでは適用されません。

私の質問は次のとおりです。

  1. COMコンポーネントを呼び出すWindowsスクリプトホストからの「壊滅的な障害」の背後に常にあるコアの問題はありますか?
  2. 構成スナップインまたはレジストリに、「32ビットアプリケーションを有効にする」ためにIISアプリケーションプールに加えた変更と同様の変更を行う必要がある場所はありますか?
  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 に答える