问题描述
我们有一个 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 发生了变化。
是否有更好的方法来处理每台设备的一个许可证或唯一生成此硬件?是否对操作系统版本号更改或任何其他软件或固件更新敏感?
解决方法
ASHWID 在应用程序/包之间提供强绑定,不受操作系统重新安装和应用程序版本更新的影响。但有时也有other reasons可以影响它,很难知道是什么原因导致了ASHWID的变化。
因此,如果您想获得唯一的 id 来区分设备,也许您可以使用 SystemIdentification.GetSystemIdForPublisher 方法,该方法返回的标识符特定于当前设备上的应用程序发布者。换句话说,同一发布者的所有应用都将为此 ID 获得相同的值(对于所有用户)。