wmi

2009-10-01 7 views
1

i utiliser ce code à l'articlewmi

http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html

mais ça marche pas sur ma machine (russe xp sp3)

quel est le problème? je dois obtenir id hdd ou carte mère pour éviter de copier mon programme sur d'autres ordinateurs

ici est exception

http://www.magicscreenshot.com/jpg/xwMD77wLWEM.html

+1

Quand vous dites 'ça ne marche pas', de quelle façon? Compiler les erreurs? Messages d'erreur d'exécution? Nous avons besoin de beaucoup plus de détails que cela pour pouvoir aider. –

Répondre

2

Selon la description de classe Win32_DiskDrive, les propriétés SerialNumber et FirmwareRevision ne sont pas disponibles sur Windows Server 2003, Windows XP, Windows 2000 et Windows NT 4.0. C'est pourquoi vous obtenez une exception en essayant d'accéder à l'un d'entre eux.

Vous souhaiterez peut-être enrouler le code qui accède à ces propriétés dans une instruction try...catch; quelque chose comme ceci:

try 
{ 
    lblSerial.Text = "Serial: " + moDisk["SerialNumber"].ToString(); 
} 
catch (ManagementException ex) 
{ 
    lblSerial.Text = "Serial: N/A"; 
} 

Edit: Pour obtenir le numéro de série, vous pouvez essayer la propriété Win32_PhysicalMedia.SerialNumber. Quelque chose comme ceci devrait fonctionner:

ManagementObjectSearcher mosRefs = new ManagementObjectSearcher 
    ("REFERENCES OF {Win32_DiskDrive.DeviceID='" + moDisk["DeviceID"].ToString() + "'} WHERE ResultClass=Win32_DiskDrivePhysicalMedia"); 
foreach (ManagementObject moRef in mosRefs.Get()) 
{ 
    ManagementObject moMedia = new ManagementObject(moRef["Antecedent"].ToString()); 
    lblSerial.Text = "Serial: " + moMedia["SerialNumber"].ToString(); 
} 
+0

et ce que je dois faire pour obtenir le numéro de série dans ce système d'exploitation? est une solution? – kusanagi

+0

@finnw: C'était une faute de frappe, il devrait lire 'Win32_PhysicalMedia'. – Helen

0

Je suis d'accord avec Helen, mais je ne voudrais pas utiliser une prise d'essai. Vous devriez l'utiliser seulement quand il n'y a pas d'autres alternatives. Regardez Win32_OperatingSystem pour la version. Si la version est> = 6.0, recherchez ces propriétés. Lorsque j'ai recherché cela dans le passé, je n'ai pas pu trouver une alternative à la valeur SerialNumber fournie dans WMI (sans utiliser DLL que je ne ferai pas parce que mon application se connecte à des machines distantes).

Questions connexes