2012-03-23 20 views
2

我們有以下代碼以檢索的硬盤ID處理器ID和MAC地址:WMI報告非唯一的處理器ID,硬盤ID和MAC地址

private static string GetWMIValue(string query, string propertyName) 
{ 
    try 
    { 
    using (ManagementObjectSearcher search = new ManagementObjectSearcher(query)) 
    { 
     using (ManagementObjectCollection results = search.Get()) 
     { 
     foreach (var result in results) 
     { 
      if (result != null && result[propertyName] != null) 
      { 
      return result[propertyName].ToString(); 
      } 
     } 
     } 
    } 
    } 
    catch 
    { 
    // do nothing. 
    } 

    return null; 
} 

public static string GetHardDriveSerialNumber() 
{ 
    string driveLetterName = Assembly.GetExecutingAssembly().Location.Substring(0, 1); 
    return GetWMIValue("SELECT VolumeSerialNumber FROM Win32_LogicalDisk WHERE DeviceID=\"" + driveLetterName + ":\"", "VolumeSerialNumber"); 
} 

public static string GetProcessorId() 
{ 
    return GetWMIValue("SELECT ProcessorId FROM Win32_Processor", "ProcessorId"); 
} 

public static string GetMacAddress() 
{ 
    return GetWMIValue("SELECT MacAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE", "MacAddress"); 
} 

這工作得很好除了在一個特定的品牌平板電腦(據我們瞭解)。在這個品牌上,每臺機器都有相同的3個值。正如你可以想象的,這與我們的許可有所不同。

有沒有人見過這個或沒有人有更好的更可靠的機制?

感謝

+0

嘗試添加到您的公式的'SerialNumber'和'Signature'值[Win32_DiskDrive](http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132%28v=vs.85%29.aspx)WMI類。 – RRUZ 2012-03-23 03:34:07

回答

0

經過研究一點看來好像這是一個衆所周知的和談論的問題。我需要做一些工作......

值得慶幸的是,這不是我惹:)我只是要解決它:(