前一阵子,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