Не удалось установить 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. Таким образом, все пользователи имеют доступ к одному и тому же ключу реестра.