50 votes

Qu'est-ce qu'un bon identifiant unique de PC?

J'ai regardé le code de ce tutoriel, et j'ai trouvé qu'il utilise My.Computer.Name pour enregistrer les paramètres qui ne devrait pas se déplacer entre les ordinateurs. Il est tout à fait possible, cependant, pour un utilisateur d'avoir deux portant le même nom Pc. Si ils voulaient avoir le même nom d'utilisateur sur chaque PC, par exemple, ils peuvent très bien se retrouver avec deux Pc nommé nom d'utilisateur-PC.

Quelles sont les bonnes méthodes d'identification des différents Pc? Ne Pc ont Guid associé avec eux, ou dois-je regarder en tirant le numéro de série de l'arrêt de certains matériels? Je n'ai pas de soins si l'identification persiste à travers la réinstallation de Windows.

(Le tutoriel j'ai fait un lien est dans VB.Net mais je suis de l'implémenter en C#)

52voto

mattbasta Points 7377

Quelques bons identifiants:

  • Adresse MAC: Il est assez facile à obtenir, et il est généralement unique. Toutefois, elle peut être falsifiée/changé assez facilement, donc, cela dépend de la façon unique qu'il doit être.
  • Numéro de Série du CPU: Il n'est pas disponible sur beaucoup de systèmes plus anciens, mais il est là. Découvrez cette page MSDN. Il ne changera pas, mais il est lié à un ordinateur.
  • HDD le Numéro de Série: C'est probablement pour ne pas changer, mais peuvent être une nuisance si le HD échoue. Découvrez cette page MSDN.

20voto

Scott Chamberlain Points 32782

Si vous êtes sur Windows, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProductId est unique par machine / par installation de Windows. où, comme dans certaines des autres réponses telles que l'adresse MAC, Proc SN et HD SN resteront les mêmes entre les situations de réinstallation de Windows / à double amorçage.

11voto

DiGMi Points 1404

La vraie réponse à cette question: Il n'y a pas une telle chose.

Il y a plusieurs "assez proche" des solutions, mais chacun a sa propre limitation.

Tous les Id de matériel - les modifications sur le Matériel. Et, dans de nombreux cas, vous pouvez modifier ces identifiants (Par exemple, d'usurpation d'adresse MAC).

Le SID, comme je l'ai déjà dit, n'Est pas bonne, parce que le SID ne changera pas si l'ordinateur a été installé à partir d'une image. Le SID est généré par l'installation de windows, si windows n'est pas installé, mais copié à partir d'une image, le SID ne changera pas (même si il est courant de le régénérer en raison d'un mythe à propos de "risque pour la sécurité" - vous ne pouvez pas compter sur qui).

Nom de l'ordinateur - Bien, comme mentionné précédemment, Ils supposent pour être unique, mais il n'est pas appliquée.

Une autre solution, vous pouvez mettre en œuvre pour générer propre identifiant unique et de l'enregistrer localement (en supposant que vous pouvez faire une telle chose). Encore une fois, cette solution ne fonctionnera pas si votre ordinateur a été mis à votre demande.

La meilleure solution pour vous dépend vraiment de ce que vous essayez d'accomplir. J'ai eu le même problème avec un très grand réseau, et la meilleure solution dans mon cas, c'était le nom de l'ordinateur. Si vous êtes absolument sûr que votre processus ne sera pas imagé, je voudrais générer un identifiant unique à l'aide de Guid, car il sera probablement le plus sûr.

9voto

andrewmcc Points 41

Voici une façon d'identifier de manière unique un ordinateur. En Utilisant Le Système.De gestion pour obtenir Win32_BIOS, vous pouvez obtenir les valeurs uniques de votre BIOS des machines.

Voir: Win32_BIOS classe, http://msdn.microsoft.com/en-us/library/aa394077.aspx

using System.Management;

string UniqueMachineId()
{
    StringBuilder builder = new StringBuilder();

    String query = "SELECT * FROM Win32_BIOS";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    //  This should only find one
    foreach (ManagementObject item in searcher.Get())
    {
        Object obj = item["Manufacturer"];
        builder.Append(Convert.ToString(obj));
        builder.Append(':');
        obj = item["SerialNumber"];
        builder.Append(Convert.ToString(obj));
    }

return builder.ToString();
}

Avec la même logique, vous pouvez également étape "Win32_DiskDrive"; http://msdn.microsoft.com/en-us/library/aa394132.aspx; et obtenir "SerialNumber" pour chaque disque physique. Dans ce cas, l'

    foreach (ManagementObject item in searcher.Get())

trouvez plusieurs éléments

2voto

MicSim Points 12980

Utilisez l'adresse MAC de la carte réseau. C'est supposé être unique. Il peut être changé, cependant. Cela dépend de la malveillance que vous attendez de vos utilisateurs et de la gravité de votre application.

Quelques exemples de code pour le faire:

 public string GetMACAddress() {
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();

    string MACAddress = String.Empty;

    foreach (ManagementObject mo in moc) {
        if (MACAddress == String.Empty) { // only return MAC Address from first card
            if ((bool)mo["IPEnabled"] == true) MACAddress = mo["MacAddress"].ToString();
        }
        mo.Dispose();
    }

    return MACAddress;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X