OPOS PosExplorer.GetDevice() возвращает значение null при выполнении в службе Windows

Фрагмент кода ниже использует OPOS .NET для открытия POS-принтера для печати. Он отлично работает, когда выполняется как часть автономного приложения. При выполнении службой Windows вызов GetDevice(...) всегда возвращает значение null.

explorer = new PosExplorer();
device_info = explorer.GetDevice(DeviceType.PosPrinter, PrinterName);
printer = (PosPrinter)explorer.CreateInstance(device_info);
printer.Open();
printer.Claim(1000);
printer.DeviceEnabled = true;

Принтер оказался Epson TM-U220B. Есть ли проблема безопасности, которую необходимо решить, прежде чем служба получит доступ к POS-устройствам? Может ли кто-нибудь порекомендовать хороший источник информации о разработке служб Windows, использующих OPOS .NET?


person Peter Beacom    schedule 14.08.2010    source источник
comment
Вы решили эту проблему? У меня есть проблема, когда Open() не работает внутри ASP.NET для одного конкретного устройства независимо от пользователя IIS (но отлично работает для всех остальных устройств OPOS).   -  person Jason Kealey    schedule 11.05.2011
comment
@Peter Beacom, я тоже столкнулся с подобной проблемой. Но проблема не возникает, когда я использую Visual Studio 2005 на компьютере с Windows 7. И он отлично работает со всеми IDE в Windows XP.   -  person TutuGeorge    schedule 07.09.2012
comment
Эта проблема была решена. Как предположил Doobi, проблема была не в коде, а в настройках безопасности рабочей станции.   -  person Peter Beacom    schedule 04.12.2012


Ответы (2)


Ах ОПОС, это было давно... ;)

Это звучит как безопасность. Способ проверить, так ли это: 1. Запустите службу под учетной записью пользователя, которая, как вы знаете, работает из автономного приложения. 2. Проверьте параметр в конфигурации службы, который позволяет ему взаимодействовать с рабочим столом.

person Doobi    schedule 14.08.2010
comment
Что и где мы можем проверить параметр в конфигурации службы, который позволяет ему взаимодействовать с рабочим столом? - person Saeed Khan; 07.02.2015

Ваш код выглядит хорошо. Я вижу имя переменной PrinterName. Эта переменная должна содержать логическое имя, присвоенное принтеру. Назначение логического имени — это отдельный шаг, который можно пропустить. Вы можете подтвердить правильность существования логического имени с помощью POSDM, доступного в POS для .Net SDK. Путь команды будет

C:\Program Files\Microsoft Point Of Service\POSDM СПИСКИ

Если устройство и присвоенное логическое имя не отображаются, это может объяснить вашу текущую ситуацию.

person David Rupe    schedule 17.05.2011