iT邦幫忙

8

辨識作業系統是否為64位元的方法--使用C#

c#
  • 分享至 

  • xImage
  •  

前一陣子,L幫公司寫了一個自動化安裝系統的程式,
有一堆必要Component,x86、x64的安裝檔案不同,例如:Windows Installer 4.5。
於是,為了讓所有系統都可以達到自動辨識、安裝的目的,寫了以下一段程式,用來辨識OS是否為64位元。
前一陣子,L幫公司寫了一個自動化安裝系統的程式,
有一堆必要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 實際測試,請安心服用...XDD


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
shunyuan
iT邦研究生 1 級 ‧ 2010-04-30 17:17:16

高手。

外獅佬 iT邦大師 1 級 ‧ 2010-04-30 17:23:19 檢舉

高手不敢當...被逼出來的..Orz

0
echen688
iT邦高手 1 級 ‧ 2010-04-30 17:28:49

高手高手高高手....

外獅佬 iT邦大師 1 級 ‧ 2010-04-30 17:30:34 檢舉

那是...雷豹..XDD

0
adison
iT邦新手 3 級 ‧ 2010-06-09 10:33:59

使用前要先加入System.Management的參考
然後using System.Management;

我要留言

立即登入留言