Il s'agit de mon ancienne implémentation pour obtenir un DeviceID unique pour Windows Universal 8.1, mais le type HardwareIdentification n'existe plus.
private static string GetId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes).Replace("-", "");
}
C'est la solution complète pour Windows Desktop:
Utilisez ce code pour obtenir le HardwareId:
using System;
using Windows.Security.ExchangeActiveSyncProvisioning;
using Windows.System.Profile;
namespace Tobit.Software.Device
{
public sealed class DeviceInfo
{
private static DeviceInfo _Instance;
public static DeviceInfo Instance
{
get {
if (_Instance == null)
_Instance = new DeviceInfo();
return _Instance; }
}
public string Id { get; private set; }
public string Model { get; private set; }
public string Manufracturer { get; private set; }
public string Name { get; private set; }
public static string OSName { get; set; }
private DeviceInfo()
{
Id = GetId();
var deviceInformation = new EasClientDeviceInformation();
Model = deviceInformation.SystemProductName;
Manufracturer = deviceInformation.SystemManufacturer;
Name = deviceInformation.FriendlyName;
OSName = deviceInformation.OperatingSystem;
}
private static string GetId()
{
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes).Replace("-", "");
}
throw new Exception("NO API FOR DEVICE ID PRESENT!");
}
}
}
Il paraît que
var deviceInformation = new EasClientDeviceInformation();
string Id = deviceInformation.Id.ToString();
fait la magie, se référant à EasClientDeviceInformation il fournit un identifiant unique.
La propriété Id représente le DeviceId à l'aide du GUID tronqué à partir des 16 premiers octets du hachage SHA256 du MachineID, de l'utilisateur SID et du nom de famille du package où le MachineID utilise le SID du groupe d'utilisateurs local .
MAIS cela ne fonctionne que pour les applications du Windows Store ... donc il doit y avoir une autre solution.
Voir ce Q&A pour une bien meilleure façon d'obtenir un ID.
Vous devez ajouter une référence aux SDK Desktop et/ou Mobile pour construire avec le jeton matériel. Au moment de l'exécution, vous devez utiliser le type ApiInformation
pour demander si l'API est présente avant de l'utiliser (d'autres familles d'appareils comme Xbox ne l'ont pas).
Cela dit, de nombreuses fois lorsque les gens demandent l'ID de l'appareil qui n'est pas réellement la meilleure solution à leur problème - êtes-vous sûr que vous devez identifier l'appareil physique sur toute sa durée de vie, même si la propriété change?
EasClientDeviceInformation ne fonctionne pas pour Windows 10 mobile. L'identifiant de l'appareil est le même pour chaque téléphone (tous nos clients win10m sont enregistrés avec le même GUID) Nous avons besoin de l'identifiant pour envoyer des messages Push au bon téléphone.
//you can use this
//its working with me very fine on windows 10
//replace the Word bios with any hardware name you want
//data also can be found with using windows application named (wbemtest)
using System.Management;
public static async Task<string> ReturnHardWareID()
{
string s = "";
Task task = Task.Run(() =>
{
ManagementObjectSearcher bios = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
ManagementObjectCollection bios_Collection = bios.Get();
foreach (ManagementObject obj in bios_Collection)
{
s = obj["SerialNumber"].ToString();
break; //break just to get the first found object data only
}
});
Task.WaitAll(task);
return await Task.FromResult(s);
}