C# 无法设置.NET条形码扫描仪设备的POS已启用

C# 无法设置.NET条形码扫描仪设备的POS已启用,c#,.net,winforms,opos,pos-for-.net,C#,.net,Winforms,Opos,Pos For .net,我目前正在开发一个.NET4.5.1应用程序,它应该使用条形码扫描仪来读取2D条形码文本。为此,安装并使用了Microsoft POS For.NET 1.14.1。条形码sanner(Intermec/Honeywell ED40)驱动程序安装正确,OPOS驱动程序为非托管OCX 我使用典型的工作流在WinForms项目中创建扫描仪实例: public partial class MainForm : Form { private PosExplorer _explorer; priv

我目前正在开发一个.NET4.5.1应用程序,它应该使用条形码扫描仪来读取2D条形码文本。为此,安装并使用了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安全设置做了几个实验,同样的问题。我想,这是一个安全设置elsewere,有人知道吗

环境:

  • Windows 7 Pro x64
  • .NET 4.5.1
谢谢

编辑:

几个小时后,我找到了原因,那就是注册表虚拟化。制造商的OPOS驱动程序(OCX)尝试写入HKLM/Software/Wow6432Node/Intermec子键。因此,该写访问被虚拟化为HKEY_用户/[用户SID]_类/VirtualStore/Machine/Software/Wow6432Node/Intermec。但是虚拟存储中的密钥不完整,许多值丢失

解决方案:

  • 删除虚拟存储中的HKEY_USERS/[User SID]\u Classes/VirtualStore/Machine/Software/Wow6432Node/Intermec密钥
  • 将原始HKLM/Software/Wow6432Node/Intermec密钥的完全访问权限分配给Windows用户组。因此,所有用户都访问相同的注册表项

问题解决了,请参见上面的我的编辑。

注意,您可以回答自己的问题,您可以编辑问题的答案并执行此操作吗?