C# COMException 作为 Windows 服务,但 WinForms OK
C# COMException as Windows Service, but WinForms OK
我正在尝试用 C#(VS2010、.NET 4.0)编写一个 Windows 服务,作为一个长 运行ning OPC 客户端。根据命令行参数,它可以 运行 作为 Windows 服务,或作为带有 Start/Stop 按钮的 WinForms 应用程序来模拟服务(但更容易调试)。
我目前正在使用 Interop.OPCAutomation 调用 COM。当我 运行 作为 WinForms 应用程序时,一切都 运行 符合预期,没有错误。但是当我 运行 作为 Windows 服务时,它失败并出现以下异常:
[System.Runtime.InteropServices.COMException: "No such interface supported"
错误代码:-2147220990
在 OPCAutomation.IOPCAutoServer.Connect(字符串 ProgID,对象节点)
在 Project.Opc.Collector..ctor(String serverName, IEnumerable`1 tagNames, String machineName, Boolean asynchronous) in C:\CompanyName\Projects\Applications\Project\Project.Opc\Collector1.cs:line 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 服务器版本设置为 SYSTEM,它不能与打开或关闭允许访问桌面一起使用。由于此代码在 WinForms 中运行良好,因此它可能不是 OPC 问题。但我不知道为什么相同的代码不能作为服务使用。
一位related article也有类似的问题,但仍未得到解答。有其他人看到 and/or 解决了这个问题吗?
服务中使用的服务帐户似乎没有 COM 组件所需的访问权限,要解决此问题,请使用管理员帐户或用于 WinForm(当前用户)的帐户。
检查与您的问题相似的 link。
我正在尝试用 C#(VS2010、.NET 4.0)编写一个 Windows 服务,作为一个长 运行ning OPC 客户端。根据命令行参数,它可以 运行 作为 Windows 服务,或作为带有 Start/Stop 按钮的 WinForms 应用程序来模拟服务(但更容易调试)。
我目前正在使用 Interop.OPCAutomation 调用 COM。当我 运行 作为 WinForms 应用程序时,一切都 运行 符合预期,没有错误。但是当我 运行 作为 Windows 服务时,它失败并出现以下异常:
[System.Runtime.InteropServices.COMException: "No such interface supported" 错误代码:-2147220990 在 OPCAutomation.IOPCAutoServer.Connect(字符串 ProgID,对象节点) 在 Project.Opc.Collector..ctor(String serverName, IEnumerable`1 tagNames, String machineName, Boolean asynchronous) in C:\CompanyName\Projects\Applications\Project\Project.Opc\Collector1.cs:line 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 服务器版本设置为 SYSTEM,它不能与打开或关闭允许访问桌面一起使用。由于此代码在 WinForms 中运行良好,因此它可能不是 OPC 问题。但我不知道为什么相同的代码不能作为服务使用。
一位related article也有类似的问题,但仍未得到解答。有其他人看到 and/or 解决了这个问题吗?
服务中使用的服务帐户似乎没有 COM 组件所需的访问权限,要解决此问题,请使用管理员帐户或用于 WinForm(当前用户)的帐户。
检查与您的问题相似的 link。