我有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))。
我试过了:
那么 - 我如何使用Windows服务中的Matlab自动化对象?
非常感谢!
更新
可能它会有所帮助 - 生产服务器是Amazon EC2实例,所以它也有终端服务器。也许这可能是个问题?因为之前我遇到了互斥锁的问题,并且通过创建全局互斥锁来解决它。
更新2
异常总是在120秒内发生(确切地说),因此看起来OLE客户端看不到CoRegisterClassObjects的调用,或者可能看不到任何其他调用。在任何情况下 - 调用Activator.CreateInstance和异常之间的延迟恰好是120秒。