C#调用HidDevice.FromIdAsync打开HID设备无报错闪退如何解决?
HID设备调用
FromIdAsync直接退出无异常的解决方法 - UWP应用必须补充设备权限声明
打开项目的Package.appxmanifest文件,切换到「功能」选项卡勾选「人机接口设备」,或者直接在manifest的Capabilities节点添加如下配置,替换为你实际的设备参数:
其中vidpid后面的两个值分别对应你的vendorId、productId,usage后面的两个值对应usagePage、usageId,均为16进制格式。<Capabilities> <DeviceCapability Name="humaninterfacedevice"> <Device Id="vidpid:XXXX XXXX"> <Function Type="usage:XXXX XXXX"/> </Device> </DeviceCapability> </Capabilities> - 控制台应用适配WinRT API权限
传统.NET控制台应用直接调用UWP的HidDevice API默认没有设备访问权限,两种方案可选:- 将控制台项目打包为MSIX包,同UWP一样添加上述设备权限声明
- 改用第三方HID操作库实现设备读写,无需适配UWP权限规则
- 检查设备访问状态
- 确认没有其他程序已经独占占用目标HID设备,关闭设备厂商配套工具、HID调试工具后重试
- 部分HID设备不支持同时读写权限,可先尝试将
FileAccessMode.ReadWrite替换为FileAccessMode.Read或FileAccessMode.Write验证是否能正常打开
- 补充异常捕获逻辑
异步方法的异常需要在await调用处捕获,将代码包裹为如下结构即可拿到具体错误信息:try { HidDevice device = await HidDevice.FromIdAsync(devices.ElementAt(0).Id, FileAccessMode.ReadWrite); if(device == null) { // 权限不足导致打开失败 } } catch(Exception ex) { // 输出ex.Message查看具体错误 }
内容的提问来源于stack exchange,提问作者Raluca Chirita
相关产品推荐
相关产品推荐

