免责声明:我对 .net 和 COM 完全一无所知。
我有一个供应商的应用程序,它似乎是用 .net 编写的,我正在尝试用一个 web 表单(一个 cgi-bin Perl 脚本)来包装它,这样我最终可以从另一台计算机上启动这个供应商的应用程序。我在 Windows Server 2003 R2 SE SP1 系统上,我将 Apache 2.2 用于 Web 服务器,将 ActivePerl 5.10.0.1004 用于 cgi 脚本。我的 cgi 脚本使用 Perl 反引号运算符调用驻留在同一台机器上的供应商应用程序。
...
$result = "Result: " . `$vendorsPath/$vendorsExecutable $arg1 $arg2`;
...
现在我只是在服务器机器上本地运行 IE Web 浏览器并访问“ http://localhost/cgi-bin/myPerlScript.pl ”。供应商的应用程序失败并记录包含以下堆栈跟踪的调试消息(我更改了几个名称,以免泄露供应商的身份):
...
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 机器之前让它在那里完全工作。那么,Windows Server 2003 机器有什么不同,它会阻止供应商的 .net 应用程序被 web cgi 脚本成功执行?
我能否以某种方式解决此问题以使其在我的服务器上运行,或者供应商是否必须对其 .net 应用程序进行更改并发布新版本?我可能是世界上唯一一个试图从一个单独的程序执行这个供应商的应用程序的人,所以如果有一个我可以在我的服务器机器上实现自己的解决方法,我不想用这个问题来打扰供应商。另外,我有点着急,我不想等待 4 或 6 个月让供应商进行修复并部署新版本。
感谢您提供的任何建议。