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.Status
是 GattCommunicationStatus.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: 如果我遇到其他棘手的情况,我会打电话给你,只是让你知道。
也许有人可以帮助我,因为我在 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.Status
是 GattCommunicationStatus.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: 如果我遇到其他棘手的情况,我会打电话给你,只是让你知道。