【问题标题】:UsbDevice.FromIdAsync returns nullUsbDevice.FromIdAsync 返回 null
【发布时间】:2016-09-10 14:41:55
【问题描述】:

我有这个代码:

private async void OnDeviceAdded(DeviceWatcher watcher, DeviceInformation deviceInformation)
    {
        if (deviceInformation.Name.StartsWith("ClearShot") && deviceInformation.IsEnabled)
        {

            targetDevice = await UsbDevice.FromIdAsync(deviceInformation.Id);
            OnConnected(EventArgs.Empty);

        }

    }

这实际上是一个从DeviceWatcher 调用的事件 问题是targetDevice 始终为空。

没有崩溃,什么都没有,它只是空值,不会改变。 为什么?

编辑:这是我在清单中的东西:

<DeviceCapability Name="usb">
    <Device Id="vidpid:184c 0001">
        <Function Type="classId:ff * *"/>
    </Device>
</DeviceCapability> 

【问题讨论】:

  • &lt;DeviceCapability Name="usb"&gt; &lt;Device Id="vidpid:184c 0001"&gt; &lt;Function Type="classId:ff * *"/&gt; &lt;/Device&gt; &lt;/DeviceCapability&gt; 不确定这是否正确。
  • 如何获取classID等信息?
  • 我也不知道详情。但是请务必将此添加到问题中,这是相关的。此处不计评论。

标签: c# .net usb uwp windows-10-universal


【解决方案1】:

我只是为了记忆,在 UsbDevice.FromIdAsync 之后它是空的,应该检查以下内容:

  1. 设备管理器中存在带有 WinUsb 驱动程序的设备。

  2. 在注册表中存在多字符串参数 DeviceInterfaceGUIDs 和生成的 GUID

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_184C&PID_0001\8000013\Device Parameters]
    "DeviceInterfaceGUIDs"=hex(7):7b,00,32,00,34,00,42,00,35,00,37,00,46,00,34,00,\
    37,00,2d,00,41,00,37,00,41,00,43,00,2d,00,34,00,46,00,41,00,32,00,2d,00,39,\
    00,43,00,31,00,33,00,2d,00,32,00,38,00,36,00,42,00,30,00,33,00,34,00,46,00,\
    
  3. Package.appxmanifest 中存在适当的 DeviceCapability

    <Capabilities>
        <DeviceCapability Name="usb">
          <Device Id="vidpid:184C 0001">
            <Function Type="classId:ff * *" />
            <Function Type="name:vendorSpecific" />
          </Device>
        </DeviceCapability>
    

【讨论】:

  • 您能否解释“设备管理器中存在带有 WinUsb 驱动程序的设备。”?我怎样才能做到这一点?在计算机上还是在设备上?
  • @Rougher 设备应该出现在设备管理器中。这意味着: * 该设备已物理连接并且 * 已为其安装 WinUsb 驱动程序。在这种情况下,您将在设备管理器中看到您的设备。 “设备管理器”是一个windows应用程序C:\Windows\System32\devmgmt.msc
  • 我在设备管理器中将其视为“USB 组件设备”(在通用串行总线控制器下),但 UsbDevice.FromIdAsync 仍然返回 null...
  • @Rougher WinUsb 驱动应该先安装到设备上。 docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/…
【解决方案2】:

我发现了问题,Windows 为我安装的 WInUSB 驱动程序由于某种原因无法正常工作,我不得不安装另一个。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2020-06-19
  • 2011-10-15
相关资源
最近更新 更多