首页 > 代码库 > 如何在Window 64bit系统上面区分此应用程序是32bit还是64bit的呢?

如何在Window 64bit系统上面区分此应用程序是32bit还是64bit的呢?

为了保持向下兼容性,大都数32位的应用程序都能运行在64位的window操作系统上。大都数情况下,我们不必担心,但是有的时候,我们需要确切的知道当前的应用程序到底是32位的应用程序呢,还是64位的应用程序呢?一般来说,有下面的3种方法:

(1) 使用任务管理器识别

如下图,打开任务管理器,并选择Processes的选项卡,32位的程序,其图像名字(Image Name)会包含*32这个关键字。

比如,第一个 chrome.exe*32,这个就代表当前的chrome浏览器应用程序的版本是32位的。

技术分享


(2)查看应用程序中的可执行文件的路径中是否包含(x86)的关键字

如果应用程序中的可执行文件的路径中包括x86的关键字,一般来说,这个应用程序就是32位的应用程序。

因为在装32位的应用程序的时候,操作系统会自动把安装目录“c:\Program Files“ 映射成C:\Program Files (x86)”,

这表示这个应用程序是32位的应用程序。另外,注意,有一些Window组件不在“c:\Program Files“ 目录下,而是在

C:\Windows\System32 目录下,这个时候我们不要想当然的认为这个目录下的DLL库或者Window的组件就是32位的,

其实不是的,恰恰相反,这个是64位组件的目录;真正32位组件的是放在C:\Windows\SysWow64这个目录下面的,神奇吧,

千万不要被坑了。其实也很好理解,Wow64代表Window 32 on Windows 64.


技术分享


(3) 如果上面两种方法都不好使的时候,可以考虑用代码去识别

3.1 如果是Java的应用程序的话

Properties props = System.getProperties();
String bits=String.valueOf(props.get("sun.arch.data.model")); 

sun.arch.data.model 有32,64或者unknown的返回值,分别对应不同的应该程序的位数。

3.2 如果是C/C++,C#的应用程序的话,我们可用PowerShell脚本

$width = [System.Runtime.InterOpServices.Marshal]::SizeOf([System.IntPtr])
if($width -eq 4){
    # 32 bit
}else if($width -eq 8){
	# 64 bit
}







如何在Window 64bit系统上面区分此应用程序是32bit还是64bit的呢?