我正按照https://ms-iot.github.io/content/en-US/win10/samples/SerialSample.htm
中的说明尝试在通用应用中打开串口我的应用在Package.appxmanifest中具有正确的DeviceCapability,我可以正确枚举所有设备,并在调用时找到所有设备:
var selector = SerialDevice.GetDeviceSelector();
var devices = await DeviceInformation.FindAllAsync(selector);
当我尝试打开任何串行端口时出现问题。对SerialDevice.FromIdAsync的调用始终返回null。
var serialPort = await SerialDevice.FromIdAsync(devices[0].Id);
然后,如https://channel9.msdn.com/events/Build/2015/3-81中所述,我尝试分析调用DeviceAccessInformation.CreateFromDeviceId的问题,并且令人惊讶的是此调用抛出了FileNotFoundException。
我传递给DeviceAccessInformation.CreateFromDeviceId的字符串是:
"\\?\ROOT#UBLOXVCP#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73}"
但它也会抛出异常:
"\\?\ACPI#PNP0501#1#{86e0d1e0-8089-11d0-9ce4-08003e301f73}"
它们都抛出FileNotFoundException。
在第9频道的视频中,Arvind Aiyar表示,您可以使用Windows 10的隐私配置重新启动对串行端口的访问,但我在隐私配置中找不到与串行端口有关的任何内容。
为了测试发生了什么,我尝试用dotPeek反汇编DeviceAccessInformation.CreateFromDeviceId方法,无法访问WinRT部分,所以我决定调用另一个API。
如果你搜索{86e0d1e0-8089-11d0-9ce4-08003e301f73},你会发现它是为COM端口定义的设备接口类,所以我打电话给:
DeviceAccessInformation.CreateFromDeviceClassId(new Guid("{86e0d1e0-8089-11d0-9ce4-08003e301f73}"));
并且此方法不会抛出任何异常并返回DeviceAccessStatus.Unspecified
我使用的是Windows 10 Pro x64 1511版,编译10586.71,Visual Studio 2015 Update 1.
我做错了吗? 是关于权限的吗?