1

我有 Windows 服务,它尝试使用以下代码创建和使用 OLE 对象(即 - Matlab 通过自动化):

var type = Type.GetTypeFromProgID("matlab.application");
var matlab = Activator.CreateInstance(type);

在我的机器上一切正常(Win7 x64,单用户),但在生产服务器(Win 2008 R2 Datacenter SP1)上我有问题。如果我像往常一样启动服务 exe 文件(我有这种可能性),它可以在那里工作,但是如果我尝试将它作为服务启动,它会返回异常:

System.Runtime.InteropServices.COMException (0x80080005):检索具有 CLSID {AC62BA4E-6ED9-4F33-9967-B260419E5EAD} 的组件的 COM 类工厂失败,原因是以下错误:80080005 服务器执行失败(来自 HRESULT 的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE ))。

我试过了:

  • 在系统/管理员/另一个用户帐户下启动服务
  • 使用 dcomcnfg 实用程序检查配置(它实际上有帮助,我有另一个错误,但现在授予“matlab.automation”dcom 对象的所有权限)
  • 在调用“Activator.CreateInstance”后,内存中有 Matlab.exe 进程,但它只是挂起..

那么 - 我如何使用 Windows 服务中的 Matlab 自动化对象?

非常感谢!

更新

可能会有所帮助 - 生产服务器是 Amazon EC2 实例,因此它也有终端服务器。也许这可能是个问题?因为我之前遇到过互斥锁的问题,通过创建全局互斥锁解决了。

更新 2

异常总是在 120 秒内发生(确切地说),所以看起来 OLE 客户端没有看到 CoRegisterClassObjects 的调用,或者可能没有任何其他调用。在任何情况下 - 调用 Activator.CreateInstance 和异常之间的延迟正好是 120 秒。

4

0 回答 0