Duplicate instances of barcode scanner under POS for .NET 1.14 and Windows 10 RRS feed

  • Question

  • We are encountering an issue with POS for .NET 1.14 and Windows 10.

    The barcode scanner device will create duplicate entries in the device manager.

    One instance of the hardware is created under "Human Interface Device" and one instance is created under "POS barcode scanner".  This behavior did not occur under Windows 7/8.  It seems to be a new device management issue with Windows 8.1 and Windows 10.

    By default, the barcode scanner will not work correctly with windows.  

    However, if I go under the "Human Interface device" entry and find the hardware_id and manually disable it, then the pos for .net device will work correctly.  I am assuming the two hardware entries are conflicting with each other.

    Is there some reason for this behavior?  It is a real pain for troubleshooting to have to remember to do this each time a new pc is configured.

    image barcode1.png, barcode2.png and barcode3.png  shows the 2 instances in the pos tester app.

    barcode4.png shows the two instances of device in device manager.

    Monday, February 19, 2018 4:25 PM

All replies

  • Is the SO being setup with an XML file that could have two entries in it?

    Sean Liming - Book Author: Starter Guide Windows 10 IoT Enterprise - www.annabooks.com / www.seanliming.com

    Tuesday, February 20, 2018 1:15 AM
  • No, we do not use XML files for config.  
    Wednesday, February 21, 2018 2:40 AM
  • How is the SO being configured? By the Honeywell utility? Or is this just the result of installation?

    Is this a clean installation of Win 10 / 8.1 or an upgrade from Windows 7?

    Microsoft has support for POS UWP applications in Win 10. I don't see how the driver for UWP would work with POS for .NET. 

    Sean Liming - Book Author: Starter Guide Windows 10 IoT Enterprise - www.annabooks.com / www.seanliming.com

    Wednesday, February 21, 2018 8:26 PM
  • I just plugged in my Honeywell scanner and I get what you are seeing with Device Manager. Without the Honeywell SO installed, and just using the Example SO from the SDK, all I see is one scanner in the TestApp.

    Sean Liming - Book Author: Starter Guide Windows 10 IoT Enterprise - www.annabooks.com / www.seanliming.com

    Wednesday, February 21, 2018 8:37 PM
  • @Woodchux,

    The scanner that you are using apparently exposes two HID interfaces and this is very common.  POS for .NET will not use the driver associated with HID POS Scanner in device manager, but there is a passthrough to allow the SO to work properly.

    Please provide details about the model of the Honeywell scanner that you are using and whether it has a separate base that allow you to use it in a wireless mode. 

    It would also be helpful to know how your OPOS service objects are configured under HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS in the system registry.

    Terry Warwick

    Saturday, February 24, 2018 7:39 PM
  • This occurs with all of the Honeywell 2d scanners (4600, 3310g, 1900, etc).  We do not use wireless at all, they are all USB interfaces.

    I dont have an issue with it creating/exposes two HID interfaces in device manager.  The problem is that POS for .NET will not read a barcode or allow to open the scanner unless i disabled one of the interfaces in device manager.  Then it works fine.

    We have no  registry key in the location you mentioned (there is nothing at that registry location).   The only configuration we do is to drop the native service object dll file into the following folder:

    C:\Program Files (x86)\Common Files\microsoft shared\Point Of Service\Control Assemblies

    It appears that in Microsoft pos for .net test app, there are two instances listed.  The first one i can open and claim, but when i scan nothing happens.  The second instances I can open and claim and it scans correctly.  So, i suspect the app is automatically "claiming" the first device it finds with the service object name.  When i disable that first device in device manager, it starts to claim the second (working) instance.    I'm not sure if this makes sense.  

    Is there some way to set the correct one as the "default" so it knows to claim that one?  Since they both have the same name, i am not clear how to do this.

    • Edited by Woodchux Saturday, May 19, 2018 5:08 PM update
    Saturday, May 19, 2018 4:56 PM
  • @Woodchux,

    We are having difficulty understanding exactly what is causing the problem that you are encountering. There is no "default", we need to track down what is creating the duplicate devices that you are seeing in the POS for .NET Test App.  Can you please help us with some more details?

    1. Please provide a link to the Service Object that you installed so that we can install the same.

    2. Do you install any OPOS components on this PC?

    3. If yes, do you have anything in the system registry under \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\OLEforRetail?  Please provide details.

    Terry Warwick

    Monday, June 11, 2018 3:12 PM
  • Terry,

    1. see attached. https://app.box.com/s/59oqtfmjg9yoewz5xtdwbwomb2lqgp7i

    2.  No.

    3.  There is nothing at that registry location.

    Tuesday, October 9, 2018 4:57 PM
  • @Woodchux,

    It is possible to install multiple instances of a Service Object and it seems as though there is either an issue in this Service Object or the configuration.  From your earlier post, this appears to be a POS for .NET Service Object for POS for .NET 1.14, however I am not able to find the equivalent on the Honeywell website.  Since you are attempting to install a Honeywell Scanner and that Service Objects are distributed by the HW vendor, I will need to refer you to them for further assistance.  If it is determined by Honeywell that there is an issue in POS for .NET causing this problem they can contact us directly to work out the issue.

    Terry Warwick, Microsoft

    Tuesday, October 9, 2018 7:39 PM
  • @Terry

    This is a fairly old native service object so its probably not supported by Honeywell.  It is nice to use because it is so lightweight to install and maintain.    As I discussed it works great on all legacy HHP and Honeywell devices.  The only issue i have found is the duplicate instances in windows device manager that locks up the device unless i disable one in device manager.  Then it works fine. 

    I pasted the relevant part of the code here in case you have any ideas what may be causing it to create multiple instances of the service object.   Maybe it is something obvious.  There is no configuration so it cannot be a configuration issue.  This service object requires no configuration.  It is plug and play.

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Resources;
    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Security.Permissions;
    using System.Text;
    using System.Threading;
    using Microsoft.PointOfService;
    using Microsoft.PointOfService.BaseServiceObjects;
    using System.IO;
    //This Service Object conforms to POS for .NET 1.14
    namespace POS4NET.POSServiceObjects.Scanners
        //   [Externalized]
        //VID 0536 are legacy HHP scanners (e.g., 4600, 4800), 
        //VID 0536 PID 0307 is the ImagePod 30206-001297E      
        //VID 0536 PID 01c7 is the orange scanner HHP4800 or 30206-000709SE
        //VID 0536 PID 0467 is the orange scanner HHP4800i   
        //VID 0536 PID 04C7 is the black 4600RSF   
        [HardwareId(@"HID\Vid_0536&Pid_0000&Rev_0000", @"HID\Vid_0536&Pid_FFFF&Rev_9999")]
        //0C2E are the newer Honeywell scanners Xenon, Vuquest 3310
        //VID 0C2E PID 0907 Xenon 1900HHD   
        //VID 0C2E PID 0b67  Vuquest 3310g
        [HardwareId(@"HID\Vid_0C2E&Pid_0000&Rev_0000", @"HID\Vid_0C2E&Pid_FFFF&Rev_9999")]
        [ServiceObject(DeviceType.Scanner, "HoneywellScannerSO", "Service Object for Honeywell Barcode Scanners POS for .NET", 1, 14)]
        public class HandHeldScanner : ScannerBase
            // Fields
            private bool autodisable = false;
            private string checkhealthtext = "OK";
            private static byte[] CMD_HDR = new byte[] { 0x16, 0x4d, 13 };
            private const int HANDHELD_VID = 0x218;
            private byte[] hhAimID;
            private byte hhCodeID;
            private byte[] hhScanData;
            private int hhScanDataLen;
            private IntPtr HidHandle = IntPtr.Zero;
            private USBReadThread ReadThread;
            private static byte[] SCANNER_DISABLE_CMD_STR = new byte[] { 0x16, 0x30, 13 };
            private static byte[] SCANNER_ENABLE_CMD_STR = new byte[] { 0x16, 0x31, 13 };
            private Hashtable scannerHash = new Hashtable();
            //StringBuilder log = new StringBuilder();
            // Methods
            public HandHeldScanner()

    Saturday, October 13, 2018 3:55 PM