2014-09-29 86 views
0

如何唯一标识表面(平板电脑)?我如何获得平板电脑的ID?有一种使用`HardwareIdentification.GetPackageSpecificToken(null)的方法。问题是,它改变了简单的硬件更改,如禁用蓝牙。有没有办法为平板电脑获得独一无二的ID?WindowsRT表面(平板电脑)识别

+0

你的意思是用asp.net标记问题吗?如果是这样,你想做什么? – 2014-09-29 09:39:48

+0

重要的是你需要多长时间ID,但对于大多数目的(仅限于平板电脑,而不是电话),您可以使用['EasClientDeviceInformation.Id'](http://msdn.microsoft.com/zh-cn/library /windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.aspx)。此属性为您提供“MachineID,User SID和Package Family Name”组合的SHA256散列的一半。这将永远不会改变(只要您的套餐系列名称保持不变,它应该),但它会因用户而异,因此它不会唯一标识单个设备。 – 2014-09-29 19:18:12

+0

感谢@ NateDiamond.is有一种方法来识别两个平板电脑,尽管它被多个用户使用 – 2014-09-30 07:47:19

回答

0

您可以使用HardwareIdentification.GetPackageSpecificToken(null),看到http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx

这功能为您提供了大量的信息,你可以过滤,只要你喜欢。例如:

using System.Runtime.InteropServices.WindowsRuntime;

public static string GetMachineId() 
{ 
    var hardwareToken = 
     HardwareIdentification.GetPackageSpecificToken(null).Id.ToArray(); 
    var count = hardwareToken.Length/4; 
    ulong id = 0ul; 
    for (int i = 0; i < count; i++) 
    { 
     switch (BitConverter.ToUInt16(hardwareToken, i * 4)) 
     { 
      case 1: 
       // processor 
      case 2: 
       // memory 
      case 9: 
       // system BIOS 
       id = (id << 12)^BitConverter.ToUInt16(hardwareToken, i * 4 + 2); 
       break; 
     } 
    } 
    return Convert.ToBase64String(BitConverter.GetBytes(id)); 
} 

但是,请记住,这个功能和底层API,不能在所有连接到互联网的设备保证绝对的唯一性。您通常会将其与关于用户的信息结合起来。

另一种方法是在本地(非漫游)存储中生成并存储GUID,并将其用作机器ID。根据你的具体需求,这可能是一个更好的解决方案。

UPDATE

的GUID方法相当简单。刚开始使用

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
    "installationId", 
    CreationCollisionOption.FailIfExists); 

using (Stream fileStream = await file.OpenStreamForWriteAsync()) 
{ 
    await fileStream.WriteAsync(installationId.ToByteArray(), 0, 16) 
    await fileStream.FlushAsync(); 
} 

在随后的运行中生成新的GUID的应用程序使用

Guid installationId = Guid.NewGuid(); 

运行,那么存储在本地文件中的第一次,你发现该文件是存在的,阅读它。

此方法的一个可能的缺点是,当应用程序被卸载并随后重新安装时,将会生成一个新的GUID。

+0

@KrisVandermotton .as我在我的问题中说过,这种方法不会解决我的问题,因为packagespecificToken是针对您关闭的小硬件更改你的蓝牙 – 2014-09-30 08:29:27

+0

@MigaraKulasekara正如我在我的回答中所说的,你可以过滤这些信息。当添加或删除网络适配器或蓝牙连接时,我显示的功能不会更改其输出。 – 2014-09-30 08:32:24

+0

谢谢@ KrisVandermotten,你能解释一下GUID的方法吗? – 2014-09-30 08:49:27