2009-10-01 48 views
1

我用这个代码在文章问题WMI

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

,但它不是我的机器(俄罗斯XP SP3)

什么问题上工作? 我需要得到ID HDD或主板以防止复制在其他计算机上

这里我的计划是例外

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

+1

当你说“这是行不通的”,以什么样的方式?编译错误?运行时错误消息?我们需要更多的细节才能够提供帮助。 – 2009-10-01 09:08:02

回答

2

按照该Win32_DiskDrive类的描述中,SerialNumberFirmwareRevision属性不可用在Windows Server 2003,Windows XP,Windows 2000和Windows NT 4.0上。这就是为什么当你尝试访问其中的一个时会遇到异常。

您可能想要将访问这些属性的代码打包在try...catch语句中;是这样的:

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

编辑:要获得序列号,你可以试试Win32_PhysicalMedia.SerialNumber财产。像这样的东西应该工作:

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

和我必须做什么来获得在这个操作系统中的序列号?是任何解决方案? – kusanagi 2009-10-01 13:48:12

+0

@finnw:这是一个错字,它应该读取'Win32_PhysicalMedia'。 – Helen 2009-10-04 13:47:57

0

我同意海伦,但我不会使用try catch。只有在没有其他选择的情况下,您才应该使用它。查看Win32_OperatingSystem的版本。如果版本> = 6.0,则查找这些属性。

当我研究这个过去我无法找到在WMI提供的serialNumber值替代(不使用DLL的,我不会做,因为我的应用程序连接到远程机器)。