Я пытаюсь написать службу Windows на C# (VS2010, .NET 4.0), которая действует как долговременный клиент OPC. В зависимости от аргументов командной строки он может запускаться как служба Windows или как приложение WinForms с кнопкой «Старт/Стоп» для эмуляции службы (но ее легче отлаживать).C# COMException как служба Windows, но WinForms OK
В настоящее время я использую 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, Boolean asynchronous) в 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 как SYSTEM, и она не работает с включением и выключением доступа к рабочему столу. Поскольку этот код отлично работает в WinForms, это, вероятно, не проблема OPC. Но я не знаю, почему тот же код не будет работать как услуга.
A related article имеет аналогичную проблему, но остается без ответа. Кто-нибудь еще видел и/или решал эту проблему?
Не каждый объект COM работает в режиме обслуживания Windows. Вы должны спросить своего поставщика о подтверждении. –