Search code examples
c#printingpoint-of-sale

Microsoft Point of Service won't detect printer


Some background: I'm using an Epson TM-T88V receipt printer connected via USB with Epson OPOS for .NET version 1.12.20 installed. It is detected and can print test sheets just fine from the devices manager.

My problems begin with Microsoft Point of Service. It seems to not want to connect to the printer or even acknowledge its existence. The configuration xml file has been auto-populated (correctly I think?) and looks like this:

<?xml version="1.0"?>
<PointOfServiceConfig Version="1.0">
  <ServiceObject Type="PosPrinter" Name="TM-T88V">
    <Device HardwarePath="TM-T88V" Enabled="yes">
      <LogicalName Name="EpsonReceiptPrinter" />
      ...
      </Device>
  </ServiceObject>
</PointOfServiceConfig>

However when I try to access it via posdm.exe "listdevices", it doesn't pick up on the existing physical printer and only lists simulators. Posdm.exe is clearly using this file, as it gets written to/read from when I use the "adddevice" command.

I'm fairly new to POS/OPOS programming, but I'm also assuming this is why the printer goes undetected when I try to access it via C# with the PosExplorer.

Is there anything I'm missing that would make the POS refuse to connect to my device?


Solution

  • After a lot of headaches and trial-and-error, I've found a way to make this work.

    First, I happened to stumble across this forum post, which indicated that the current Epson OPOS driver I'm using might not support Microsoft PoS 1.14. So I uninstalled it and downloaded Pos 1.12 instead.

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/7fbc7186-560d-400b-9bfb-c638c5126e46/need-help-with-tmt20ii?forum=posfordotnet

    And second, it seems that having any other windows drivers installed will enable Windows to take hold of the device and prevent any other applications from using it. So, I uninstalled the default Epson driver utility. This nugget of wisdom came from here:

    http://discuss.joelonsoftware.com/default.asp?dotnet.12.699035.8

    The combination of these two changes worked for me. However it seems Microsoft PoS is pretty finicky and a lot of the drivers out there leave a lot to be desired, so this might not be the solution for everyone.