我正在尝试在C#(VS2010,.NET 4.0)中编写Windows服务,该服务充当长期运行的OPC客户端。根据命令行参数,它可以作为Windows服务运行,也可以作为带有“开始/停止”按钮的WinForms应用程序来模拟服务(但更容易调试)。
我目前正在使用Interop.OPCAutomation来调用COM。当我作为WinForms应用程序运行时,一切都按预期运行,没有错误。但是,当我作为Windows服务运行时,它失败并出现以下异常:
[System.Runtime.InteropServices.COMException:“不支持此类接口” ErrorCode:-2147220990 在OPCAutomation.IOPCAutoServer.Connect(String ProgID,Object Node) 在Project.Opc.Collector..ctor(String serverName,IEnumerable`1 tagNames,String machineName,布尔异步)在C:\ CompanyName \ Projects \ Applications \ Project \ Project.Opc \ Collector1.cs:第41行
以下是有问题的代码:
_server = new OPCServer(); //this works OK
try {
_server.Connect(serverName, machineName); // this is where it fails
} catch (Exception exc) {
string message = string.Format("Unable to connect to OPC server {0} on {1}", serverName, machineName);
OpcException exception = new OpcException(message, exc);
Logger.Log(message, LogLevel.Exception, exception);
throw exception;
}
我正在以Windows身份运行Windows服务器版本,但它无法启用或禁用对桌面的访问权限。由于此代码在WinForms中运行良好,因此可能不是OPC问题。但我不知道为什么相同的代码不能作为服务工作。
related article有一个类似的问题,但仍然没有答案。还有其他人看过和/或解决了这个问题吗?