2010-08-14 1 views
1

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

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?

+0

Вы разрешили эту проблему? У меня проблема с тем, что Open() терпит неудачу при запуске внутри ASP.NET для одного конкретного устройства независимо от пользователя IIS (но отлично работает для всех остальных OPOS-устройств). –

+0

@Peter Beacom я тоже сталкивался с подобной проблемой. Но проблема не возникает, когда я использую Visual Studio 2005 в Windows 7. И он отлично работает во всех IDE в Windows XP. – TutuGeorge

+0

Эта проблема решена. Как было предложено Doobi, проблема была не в коде, а в настройках безопасности рабочей станции. –

ответ

3

Ах OPOS, это было время ...;)

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

+0

Что и где мы можем Проверить настройку в конфигурации службы, которая позволяет ему взаимодействовать с рабочим столом? –

2

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

C: \ Program Files \ Microsoft Point Of Service \ POSDM LISTNAMES

Если устройство и назначен Logical Name не появляются, то, что могло бы объяснить текущую ситуацию.