Webusb: 尝试在Windows上打开打印机时访问被拒绝

6
我正在尝试使用Chrome的WebUSB API允许POS网络应用程序直接打印到StarMicronics(或任何收据打印机)上。我几乎完全使用此处的示例,只是将vendorId过滤器修改为StarMicronics的供应商ID。我还尝试了完全空的过滤器。它在我测试过的Mac电脑上表现得很好,但问题出现在Windows上。
当我点击打印按钮时,Chrome会打开连接窗口,我的设备被列出,我可以选择它并单击“连接”。因此,navigator.usb.getDevices()非常有效。在将网站连接到设备后,刷新窗口后,Chrome可以毫不费力地再次找到设备。
问题出现在我尝试执行device.open()时。控制台中会显示此错误:DOMException: Access Denied。从这一点开始,我无法执行device.selectConfiguration()device.claimInterface(),因为我显然需要先打开设备。
我已在Chrome中启用了我知道的所有标志: #enable-experimental-web-platform-features #enable-webusb #new-usb-backend 但这些都没有帮助。我还尝试使用其他打印机,例如HP Deskjet和Dymo Label Writer,但都出现了同样的错误消息,即拒绝访问。
总之,在Mac上它运行良好。如果您有任何帮助,请不吝赐教。

你解决了这个问题吗?我也遇到了同样的问题,你能帮我吗? - Kumar
2个回答

5
在Windows上,当已经有一个驱动程序声明了设备时,您会收到“访问被拒绝”错误。Windows驱动程序模型要求加载“winusb.sys”驱动程序,以便任何将由用户空间应用程序(如Chrome)访问的设备都能够被访问。
请参阅我之前回答智能卡读卡器遇到相同困难的问题的答案

啊,是的,我看过那个了,但是因为他的错误在于申请设备(而我在这方面没有任何问题),而不是在打开设备时出现了问题,所以我认为它与我的情况不适用。谢谢,我今天会尝试一下,看看能得出什么结论。 - reblevins
1
所以,我已经下载了zadig实用程序,因此我从Windows打印机中删除了打印机,打开了zadig并确保安装了WinUSB(v6.1.7600.16385)驱动程序,并且它没有出现在Windows打印机中,但我仍然收到相同的错误。请再次注意,这不是要求设备,那很好,而是尝试打开设备时出现问题,我得到的错误与您在其他答案中的人略有不同。也许我还在做错什么,我对这个usb东西不熟悉。 - reblevins

2
您需要首先下载 Star Micronics Windows 驱动程序 (在此处为 SP700 提供)。 您需要“USB 供应商类驱动程序”(同样,在此处提供 SP700)。
当然,没有自动安装程序(据我所知),因此您必须打开 StarUSBVendorClassDriver_... 压缩文件夹,并导航到 Manuals/usb-vendor-class-driver_im_en.pdf
在阅读此文档时,您会注意到实际上需要使用以下 cmd 从 CMD 行安装驱动程序(请注意 <version_here>,不要复制+粘贴):
pnputil -a StarUSBVendorClassDriver_<version_here>\USBVendorClassDriver\SMJUSBCOM.INF

一旦您安装了正确的驱动程序,请从下载页面此处下载Zadig实用程序。这个网站充满广告,但我没有遇到任何问题。
打开Zadig,切换“选项”菜单下拉菜单,并切换“列出所有设备”。

Zadig Options Dropdown

然后您应该在下面的下拉列表中看到您的设备。请如下所示选择它。

Select Printer

然后,在左侧下拉菜单中,您将看到选择了一个“非WinUSB”驱动程序。在右侧,请确保选择了WinUSB,并单击“替换驱动程序”。

Select Driver

这应该启用WebUSB!祝您打印愉快!

注意:此设置已经验证可通过WebUSB打印到Epson TM-T88VI。 - The Aelfinn
那么这是那些带有驱动程序的打印机通过WebUSB访问的唯一方式吗? - Sola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接