前一陣子,幫公司寫了一個自動化安裝系統的程式,
有一堆必要Component,x86、x64的安裝檔案不同,例如:Windows Installer 4.5。
於是,為了讓所有系統都可以達到自動辨識、安裝的目的,寫了以下一段程式,用來辨識OS是否為64位元。

先解說一下基本的原理:
辨識的原理,其實很簡單,基本的原理是透過檢查作業系統的『CPU定址長度』來判定。
32位元的作業系統,CPU定址長度會是32bit,即使使用的實體CPU是64位元的,OS仍會判定是32bit。
64位元,就沒有這種問題啦,不是64位元的CPU,應該也裝不了64位元的OS。

以下是判斷的程式碼:

  1. private bool DetectIf64bit()  
  2. {  
  3.   bool Is64Bit;  
  4.   ObjectQuery objQry;  
  5.   System.Management.ManagementScope mngScope;  
  6.   System.Management.ConnectionOptions connOpt = new ConnectionOptions();  
  7.   System.Management.ManagementObjectSearcher searcher;  
  8.   
  9.   //-----設定 WMI 連接資訊-----  
  10.   connOpt.Username = "";   // 登入系統的帳號  
  11.   connOpt.Password = "";   // 密碼  
  12.   connOpt.Authentication = AuthenticationLevel.Default;   // 連線驗證方式  
  13.   mngScope = new ManagementScope();  
  14.   mngScope.Path = new ManagementPath(@"\\.\root\cimv2");  
  15.   mngScope.Connect();  
  16.   
  17.   //----- 透過WMI擷取CPU定址長度資訊  
  18.   objQry = new ObjectQuery("SELECT * FROM Win32_Processor");  
  19.   searcher = new ManagementObjectSearcher(mngScope, objQry);  
  20.   Is64Bit = false;  
  21.   
  22.   foreach (ManagementObject QryObj in searcher.Get())  
  23.   {  
  24.     if (QryObj.GetPropertyValue("AddressWidth").ToString().Trim() == "64")  
  25.     {  
  26.       Is64Bit = true;  
  27.       break;  
  28.     }  
  29.   }  
  30.   
  31.   return (Is64Bit);  
  32. }  



這個辨識方法,已於Windows XP/Vista/2003/2008/7 實際測試

arrow
arrow

    NoSleep 發表在 痞客邦 留言(0) 人氣()