在 Windows 10 商店应用程序 c# 中获取设备的唯一 ID

Posted

技术标签:

【中文标题】在 Windows 10 商店应用程序 c# 中获取设备的唯一 ID【英文标题】:get unique id of the device in windows 10 store app c# 【发布时间】:2021-08-27 21:32:01 【问题描述】:

我们有一个 uwp windows 10 商店应用程序及其每台设备的许可。当该许可证已应用于任何设备时,我们会抛出错误。用户可以卸载该应用程序并在同一设备上重新安装,并且相同的许可证密钥可以正常工作。

但是每隔几天我注意到由以下生成的 HWID(hardwareId) 不是唯一的,当用户卸载应用程序并安装在同一设备上时,许可证密钥失败。

private static string GetId()

    var token = HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = DataReader.FromBuffer(hardwareId);

    var bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);

    return BitConverter.ToString(bytes).Replace("-", string.Empty);

根据我的分析,我认为当客户的计算机重新启动时,我们的客户的 hwid 发生了变化。尽管就硬件本身而言,没有任何改变。所以设备名称、设备型号、操作系统对于这些用户来说都是一样的,只有 HWID 发生了变化。

有没有更好的方法来处理每个设备的一个许可证或唯一地生成这个 hwid?它是否对操作系统内部版本号更改或任何其他软件或固件更新敏感?

【问题讨论】:

【参考方案1】:

ASHWID 提供了应用/包之间的强绑定,不受操作系统重新安装和应用版本更新的影响。但有时也有other reasons会影响它,很难知道是什么导致了ASHWID的变化。

因此,如果你想获取唯一的id来区分设备,也许你可以使用SystemIdentification.GetSystemIdForPublisher方法,这个方法返回的标识符是特定于当前设备上的应用发布者的。换言之,同一发布者的所有应用都将获得该 ID 的相同值(对于所有用户)。

【讨论】:

当您说每个应用程序包都会有所不同时,这是否意味着当我升级同一包的内部版本号时,它会返回一个新标识符吗? 我的答案已更新,请查看。

以上是关于在 Windows 10 商店应用程序 c# 中获取设备的唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

开发 Windows 应用商店应用程序

如何在 Windows 商店应用程序中处理/捕获长按

如何调试 Windows 商店应用程序崩溃?

如何制作一个 C# Windows 窗体应用程序,为 Windows 应用商店转换,从 Windows 开始

有没有办法使用 c# 为 Windows 8 商店应用程序缩进列表视图中的某些项目?

Windows 商店应用程序 WInRT XAML C# - 如何获取导航页面文本框值