从Windows服务创建OLE对象

时间:2013-01-18 16:11:18

标签: c# matlab service com

我有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的组件的COM类工厂   {AC62BA4E-6ED9-4F33-9967-B260419E5EAD}由于以下原因而失败   错误: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秒。

0 个答案:

没有答案