BLE 使用 WinRT:执行写入特性 "GetCharacteristicsForUuidAsync()" 时访问被拒绝

BLE Using WinRT: Access Denied When Executing "GetCharacteristicsForUuidAsync()" for Write Characteristic

也许有人可以帮助我,因为我在 Windows 10 上使用 WinRT 的蓝牙 LE 遇到了一个非常棘手的情况(就像这里假设的:)。

我需要在 Win32 经典桌面应用程序中使用 BLE。 我们的代码在使用 .NET 运行时(v4.0.30319,.NET Framework 4.6.2)的 32 位框架应用程序中 运行。我能够处理所有其他问题(强命名一些 NuGet 程序集 (Shiny.BluetoothLE),运行 BluetoothAdapter.GetRadioAsync() 在 64 位 COM 代理 DLL 中 运行 在 64 位 Windows) 但现在我完全被这个困住了,这里是:

执行var result = await gattDeviceService.GetCharacteristicsForUuidAsync(uuid, BluetoothCacheMode.Cached);时出现问题,参见此处https://docs.microsoft.com/de-de/uwp/api/windows.devices.bluetooth.genericattributeprofile.gattdeviceservice.getcharacteristicsforuuidasync?view=winrt-20348。 在获取读取特征时,result.StatusGattCommunicationStatus.Success 并且结果包含所需的特征。 但当然我还需要获得写入特性,而且我总是得到 GattCommunicationStatus.AccessDenied! 因此,结果不包含特征。

有人知道这是为什么吗?我真的需要帮助,因为我现在有点迷路了……

我也试过通过注册表设置 AccessPermission 就像假设的那样 here 但一点运气都没有......

PS:我使用 Windows 10 SDK Kit Build 20348,如上所述,它是一个 C# .NET Framework 4.6.2 项目,我们所有的程序集都是强命名的,因为使用了 GAC。如果我遗漏了什么,请随时与我联系。

对于遇到同样愚蠢问题的任何人...这是解决方案:

在 Windows 上,在 Non-UWP 应用程序中使用 .NET Framework 4.6.1+ 和 WinRT 库,您只能调用 ONCE 获取特性,无论您是通过 gattDeviceService.GetCharacteristicsAsync(BluetoothCacheMode.Uncached) 一次调用所有特性,还是通过 gattDeviceService.GetCharacteristicsForUuidAsync(uuid, BluetoothCacheMode.Cached).

调用特定特性

任何后续调用都将失败并显示 GattCommunicationStatus.AccessDenied... 所以我现在的解决方案是一次检索所有特征并在本地过滤它们。

成功了!无论如何,这太愚蠢了……现在浪费了我很多时间! 看起来,我也不需要通过注册表设置任何 AccessPermission

PS: 如果我遇到其他棘手的情况,我会打电话给你,只是让你知道。