19

是否有任何机制来唯一识别设备(即使它是匿名的)?

需要明确的是,“设备”是指计算机/平板电脑/个人电脑。

视窗 8.x

http://codepaste.net/ybt893

string HardwareId()
{
    var token = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
    var bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);
    return BitConverter.ToString(bytes);
}

视窗 10

您必须添加移动和/或桌面扩展 SDK。

string HardwareId()
{
    var token = HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
    var bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);
    return BitConverter.ToString(bytes);
}
4

3 回答 3

19

刚刚在 Windows 8 RTM 中添加了这样的能力:

Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null)
于 2012-08-07T19:22:41.610 回答
6

Windows 8 中的 Metro Style 应用程序似乎没有一种方便的方法来获取系统维护的唯一标识符,例如 Windows Phone 7 提供的Microsoft.Phone.Info.DeviceExtendedProperties.GetValue( "DeviceUniqueId" )

到目前为止,我发现的最佳解决方案是简单地在应用程序本地存储中生成一个新的 guid ,并使用该标识符来识别计算机,以便当前和将来启动您的应用程序。

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Object value = localSettings.Values["uniqueDeviceId"];
if (!value)
{
    value = Guid.NewGuid();
    localSettings.Values["uniqueDeviceId"] = value;
}

请记住,用户可能会删除本地存储并导致您的应用程序忘记并重新生成该值(甚至可能修改/欺骗该值),因此不要将其用于任何关键的安全目的。由于我只将这种技术用于粗略的统计和使用情况报告,因此这对我的需求来说很好。

于 2012-06-02T23:14:46.623 回答
5

这可以用作登录用户的一致 ID 吗?

http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.id.aspx

EasClientDeviceInformation.Id | id 属性

返回本地计算机的标识符。Id 属性表示使用从 MachineID、用户 SID 和应用程序 ID 的 SHA256 哈希的前 16 个字节截断的 GUID 的 DeviceId,其中 MachineID 使用本地用户组的 SID。GUID 的每个组件都按网络字节顺序返回。

于 2013-03-01T22:01:32.297 回答