2013-06-24 25 views
0

我想在.NET ID處理器WMI但是當我使用get()方法從ManagementObjectSearcher,我發現了一個內存溢出異常...win32_processor了內存

如果要採取從代碼看看見下文:

ManagementObjectSearcher searcher = new ManagementObjectSearcher(
       "select * from Win32_Processor"); 

      foreach (ManagementObject share in searcher.Get()) 
       foreach (PropertyData PC in share.Properties) 
        if (PC.Name.Equals("ProcessorId")) 
         return (string)PC.Value; 

      return null; 

此代碼的工作對他人的計算機,但不是我的...

我使用Windows 7

什麼問題?

我試圖重新啓動WMI服務和解決不了我的問題:(

+0

然而,應該工作 –

回答

2

有幾個原因可能導致內存溢出異常的WMI

  1. 可能存在內存泄漏,來源: http://brooke.blogs.sqlsentry.net/2010/02/win32service-memory-leak.html
  2. 檢查您是否有權限,這可以解釋爲什麼您的代碼在某些計算機上工作,爲什麼不在您的代碼上。
  3. 以管理員身份運行您的代碼(用於調試開始VS作爲管理員)
  4. 這裏是一個其他的代碼片段,試試這個,以及...誰知道

樣品:

public static String GetCPUId() 
{ 
    String processorID = ""; 

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
     "Select * FROM WIN32_Processor"); 

    ManagementObjectCollection mObject = searcher.Get(); 

    foreach (ManagementObject obj in mObject) 
    { 
     processorID = obj["ProcessorId"].ToString(); 
    } 

    return processorID; 
} 

來源:WIN32_Processor::Is ProcessorId Unique for all computers

+0

非常感謝你! 我試圖啓動它的管理員,它工作正常:) 但在彼此的計算機,我試圖啓動它上的用戶帳戶,而無需管理員的作用和它的作品太... 爲什麼在我的,它沒有管理員權限不起作用? – Tata2

+0

檢查計算機上的UAC(http://en.wikipedia.org/wiki/User_Account_Control)是否爲'開'。 –

+0

我以前遇到過這個問題,這取決於用戶權限。爲了讓WMI的某些部分能夠正確使用用戶帳戶,您必須執行一些帳戶權限。 – Sean