前一陣子,幫公司寫了一個自動化安裝系統的程式,
有一堆必要Component,x86、x64的安裝檔案不同,例如:Windows Installer 4.5。
於是,為了讓所有系統都可以達到自動辨識、安裝的目的,寫了以下一段程式,用來辨識OS是否為64位元。
先解說一下基本的原理:
辨識的原理,其實很簡單,基本的原理是透過檢查作業系統的『CPU定址長度』來判定。
32位元的作業系統,CPU定址長度會是32bit,即使使用的實體CPU是64位元的,OS仍會判定是32bit。
64位元,就沒有這種問題啦,不是64位元的CPU,應該也裝不了64位元的OS。
以下是判斷的程式碼:
- private bool DetectIf64bit()
- {
- bool Is64Bit;
- ObjectQuery objQry;
- System.Management.ManagementScope mngScope;
- System.Management.ConnectionOptions connOpt = new ConnectionOptions();
- System.Management.ManagementObjectSearcher searcher;
- //-----設定 WMI 連接資訊-----
- connOpt.Username = ""; // 登入系統的帳號
- connOpt.Password = ""; // 密碼
- connOpt.Authentication = AuthenticationLevel.Default; // 連線驗證方式
- mngScope = new ManagementScope();
- mngScope.Path = new ManagementPath(@"\\.\root\cimv2");
- mngScope.Connect();
- //----- 透過WMI擷取CPU定址長度資訊
- objQry = new ObjectQuery("SELECT * FROM Win32_Processor");
- searcher = new ManagementObjectSearcher(mngScope, objQry);
- Is64Bit = false;
- foreach (ManagementObject QryObj in searcher.Get())
- {
- if (QryObj.GetPropertyValue("AddressWidth").ToString().Trim() == "64")
- {
- Is64Bit = true;
- break;
- }
- }
- return (Is64Bit);
- }
這個辨識方法,已於Windows XP/Vista/2003/2008/7 實際測試
文章標籤
全站熱搜
留言列表