2009-10-01 51 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的,我不會做,因爲我的應用程序連接到遠程機器)。