信不信由你,我的安装程序太旧了,无法选择检测64位版本的Windows。
是否有Windows DLL调用或(甚至更好的)环境变量可以为Windows XP和Windows Vista提供该信息?
一种可能的解决方案
[我看到Wikipedia指出64位版本的Windows XP和Windows Vista具有唯一的环境变量:%ProgramW6432%
,所以我猜想在32位Windows上将是空的。
此变量指向Program Files
目录,该目录存储Windows和其他所有已安装的程序。英文系统的默认值为C:\Program Files
。在Windows的64位版本(XP,2003,Vista)中,还有%ProgramFiles(x86)%
默认为C:\Program Files (x86)
和%ProgramW6432%
默认为C:\Program Files
。 %ProgramFiles%
本身取决于请求环境变量的进程本身是32位还是64位(这是由Windows-on-Windows 64位重定向引起的。)
信不信由你,我的安装程序太旧了,无法选择检测64位版本的Windows。是否有Windows DLL调用或(甚至更好的)环境变量会给...
我想在这里添加我在shell脚本中使用的内容(但是可以很容易地以任何语言使用)。原因是,此处的某些解决方案无法在WoW64上运行,某些解决方案并未真正做到这一点(检查是否存在*(x86)文件夹)或在cmd脚本中不起作用。我认为,这是执行此操作的“正确”方法,即使在将来的Windows版本中也应该是安全的。
很多答案都提到了调用IsWoW64Process()
或相关功能。这不是正确
我不知道它在哪个Windows版本上存在,但是在Windows Vista和更高版本上运行:
在C#中:
我使用这个:
我知道这很古老,但是这是我用来检测Win764的东西
我在Windows 7 x64 / x86和Windows XP x86上测试了以下批处理文件,这很好,但是我还没有尝试过Windows XP x64,但这可能会起作用:
使用Windows Powershell,如果以下表达式返回true,则它是64位操作系统:
最好的方法肯定只是检查是否有两个程序文件目录,'Program Files'和'Program Files(x86)'此方法的优点是可以在操作系统未运行时执行此操作,例如,如果计算机无法启动,并且您希望重新安装操作系统,则可以执行此操作
有趣的是,如果我使用
要在命令框中检查Windows的64位版本,我使用以下模板:
使用PE数量的已编译可执行文件(不依赖注册表记录或环境变量)的另一种方法created by eGerman:
这是批处理脚本的一种更简单的方法
Windows较新版本的答案
检查注册表中是否存在HKLM \ SOFTWARE \ Wow6432Node-如果存在,则系统为64位-32位,否则。
以下是一些Delphi代码,用于检查您的程序是否在64位操作系统上运行:
我测试了我在问题中建议的解决方案:
从批处理脚本:
如果可以进行API调用,请尝试使用GetProcAddress / GetModuleHandle检查是否存在IsWow64Process,只有在具有64位版本的Windows操作系统中才存在。
我在登录脚本中使用它来检测64位Windows
对于获取OS或硬件的实际位数(32或64)的VBScript / WMI单线,请查看http://csi-windows.com/toolkit/csi-getosbits
我不知道您使用的是哪种语言,但是如果操作系统是64位,则.NET具有环境变量PROCESSOR_ARCHITEW6432
。