C#COMException作为Windows服务,但WinForms OK

时间:2016-09-23 22:01:48

标签: c# service com opc comexception

我正在尝试在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有一个类似的问题,但仍然没有答案。还有其他人看过和/或解决了这个问题吗?

1 个答案:

答案 0 :(得分:2)

似乎服务中使用的服务帐户没有COM组件的必需访问权限,要解决此问题,请使用管理员帐户或用于WinForm的帐户(当前用户)。

检查与您的问题类似的link