免責事項: 私は .net と COM についてまったく無知です。
.net で記述されているように見えるベンダーのアプリケーションがあり、それを Web フォーム (cgi-bin Perl スクリプト) でラップして、最終的に別のコンピューターからこのベンダーのアプリを起動できるようにしようとしています。私は Windows Server 2003 R2 SE SP1 システムを使用しており、Web サーバーに Apache 2.2 を使用し、cgi スクリプトに ActivePerl 5.10.0.1004 を使用しています。私の cgi スクリプトは、Perl バックティック演算子を使用して、同じマシン上にあるベンダーのアプリを呼び出します。
...
$result = "Result: " . `$vendorsPath/$vendorsExecutable $arg1 $arg2`;
...
現在、サーバー マシン上でローカルに IE Web ブラウザを実行し、「http://localhost/cgi-bin/myPerlScript.pl」にアクセスしています。ベンダーのアプリが失敗し、次のスタック トレースを含むデバッグ メッセージがログに記録されます (ベンダーの ID を漏らさないようにいくつかの名前を変更しました)。
...
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x80043A1D): 0x80040154 - Class not registered
--- End of inner exception stack trace ---
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
at VendorsTool.Engine.Core.VendorsEngine.LoadVendorsServices(String fileName, String& projectCommPath)
...
サーバー マシンで Windows コマンド ラインからベンダー アプリを実行すると、cgi スクリプトが渡すのとまったく同じ引数を使用して問題なく実行されるため、問題を引き起こしている Web スクリプトを介してアプリを呼び出すことについて何かがあります。Windows XP Pro マシン (コマンド ラインと Web 呼び出しの両方) で全体が正常に動作するため、この問題はセキュリティに関連している可能性があります。そこで実際に Web スクリプトを開発し、Windows Server 2003 マシンに移動する前に完全に機能するようにしました。では、ベンダーの .net アプリが Web CGI スクリプトによって正常に実行されないようにする Windows Server 2003 マシンの違いは何でしょうか?
この問題を何らかの方法で修正してサーバーで動作させることはできますか? それとも、ベンダーが .net アプリを変更して新しいバージョンを出荷する必要がありますか? このベンダーのアプリを別のプログラムから実行しようとしているのはおそらく世界で私だけなので、自分のサーバー マシンに自分で実装できる回避策があれば、この問題でベンダーを悩ませたくありません。さらに、私はちょっと急いでいるので、ベンダーが修正を加えて新しいバージョンを展開するまで 4 ~ 6 か月も待ちたくありません。
あなたが与えることができるアドバイスをありがとう。