在UWP应用程序

时间:2016-02-10 12:36:45

标签: c# exception serial-port win-universal-app windows-10-universal

我正按照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.

我做错了吗? 是关于权限的吗?

0 个答案:

没有答案