POS for .NET Barcode扫描程序DeviceEnabled无法设置

时间:2017-09-20 10:41:07

标签: c# .net winforms opos pos-for-.net

我目前正在开发一个.NET 4.5.1应用程序,它应该使用条形码扫描器来读取二维条形码文本。为此,安装并使用了Microsoft POS for .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 for .NET文档中找到解决方案。我用ActiveX的Internet Explorer安全设置做了几次实验,同样的问题。我想,这是一个安全设置,其他人有什么想法吗?

环境:

  • Windows 7 Pro x64
  • .NET 4.5.1

感谢。

修改

经过几个小时,我找到了原因,那就是注册表虚拟化。制造商的OPOS驱动程序(OCX)尝试写入 HKLM / Software / Wow6432Node / Intermec 子项。因此,该写访问被虚拟化为 HKEY_USERS / [User SID] _Classes / VirtualStore / Machine / Software / Wow6432Node / Intermec 。但虚拟商店的关键是不完整的,许多价值观都缺失了。

解决方案:

  • 删除虚拟商店中的 HKEY_USERS / [User SID] _Classes / VirtualStore / Machine / Software / Wow6432Node / Intermec 键。
  • 为Windows 用户组分配 HKLM / Software / Wow6432Node / Intermec 键的完全访问权限权限。因此,所有用户都访问相同的注册表项。

1 个答案:

答案 0 :(得分:1)

问题已解决,请参阅上面的编辑。