OPOS PosExplorer.GetDevice () возвращает ноль при выполнении в службе Windows - PullRequest
1 голос
/ 14 августа 2010

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

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?

Ответы [ 2 ]

3 голосов
/ 14 августа 2010

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

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

2 голосов
/ 17 мая 2011

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

C: \ Program Files \ Точка обслуживания Microsoft \ POSDM LISTNAMES

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

...