Не удалось установить POS для сканера штрих-кода.NET DeviceEnabled

В настоящее время я занимаюсь разработкой приложения.NET 4.5.1, которое должно использовать сканер штрих-кода для считывания 2D-текста штрих-кода. Для этого устанавливается и используется Microsoft POS для.NET 1.14.1. Драйвер штрих-кода Sanner (Intermec/Honeywell ED40) установлен правильно, драйвер OPOS - неуправляемый OCX.

Я использую типичный рабочий процесс для создания экземпляра сканера в проекте WinForms:

public partial class MainForm : Form
{
  private PosExplorer _explorer;
  private Scanner     _scanner;

  public MainForm()
  {
    InitializeComponent();
  }

  protected override void OnShown(EventArgs e)
  {
    base.OnShown(e);

    _explorer = new PosExplorer(this);
    DeviceInfo  device = myPosExplorer.GetDevice(DeviceType.Scanner, "Intermec_RS-232_Scanner");
    _scanner = (Scanner)explorer.CreateInstance(device);
    _scanner.Open();
    _scanner.Claim(1000);
    _scanner.DataEvent += scanner_DataEvent;
    _scanner.ErrorEvent += scanner_ErrorEvent;
    _scanner.DeviceEnabled = true; // throws here if normal user privileges
    _scanner.DataEventEnabled = true;
    _scanner.DecodeData = true;
  }
}

Все работает нормально, если приложение запущено с правами администратора. Но, если он запущен с использованием обычных прав пользователя, сканер не может быть включен. При выполнении scanner.DeviceEnabled = true В заявлении выдается следующее исключение:

PosControlException: Failed to set property DeviceEnabled.

Та же проблема возникает, если я компилирую и запускаю предоставленный образец Microsoft "Microsoft POS Tester". Но также предоставляется предварительно скомпилированная версия каталога "C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Sample Application\TestApp.exe", независимая от привилегий.

Я не нашел решения на разных форумах и в POS для.NET документации. Я провел несколько экспериментов с настройками безопасности Internet Explorer для ActiveX, та же проблема. Полагаю, это еще одна настройка безопасности, у кого-нибудь есть идея?

Среда:

  • Windows 7 Pro x64
  • .NET 4.5.1

Благодарю.

Редактировать:

После многих часов я нашел причину, это была виртуализация реестра. Драйвер OPOS (OCX) производителя пытается выполнить запись в подраздел HKLM/Software/Wow6432Node/Intermec. Таким образом, этот доступ для записи был виртуализирован для HKEY_USERS/[SID пользователя]_Classes/VirtualStore/Machine/Software/Wow6432Node/Intermec. Но ключ в виртуальном магазине был неполным, многие значения отсутствовали.

Решение:

  • Удалите ключ HKEY_USERS/[SID пользователя]_Classes/VirtualStore/Machine/Software/Wow6432Node/Intermec в виртуальном хранилище.
  • Назначьте разрешения " Полный доступ" группе пользователей Windows для исходного ключа HKLM/Software/Wow6432Node/Intermec. Таким образом, все пользователи имеют доступ к одному и тому же ключу реестра.

1 ответ

Решение

Проблема решена, см. Мое редактирование выше.

Другие вопросы по тегам