确定处理器是AMD64还是Intel64?

时间:2012-05-08 04:16:47

标签: visual-c++ wix inno-setup

Visual Studio C ++编译器provides命令行编译器选项/favor:AMD64/favor:INTEL64分别针对AMD64或Intel64处理器进行优化。现在,AMD64和Intel64 are essentially interchangeable这两个术语用于大多数目的,但编译器可以优化are some differences

在Microsoft Windows 7上,是否有可靠的方法在应用程序安装时检查我们是否在AMD64或INTEL64系统上安装?

我正在使用InnoSetup和WiX作为安装程序,我正在推测选择基于AMD64或INTEL64 CPU安装的版本。


编辑:回顾一些注意事项

最后,来自RRUZAndrew Cooper的答案都为解决这个问题提供了很好的可靠策略,但由于它们都不是真正坚定的未来证明,我个人会坚持我项目的默认/favor:blend

3 个答案:

答案 0 :(得分:5)

您可以使用Win32_Processor WMi类,从inno设置中您可以毫无问题地执行WMI查询。检查此样本

var
  FSWbemLocator : Variant;
  FWMIService   : Variant;
  FWbemObject   : Variant;
begin
FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
FWMIService   := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
FWbemObject   := FWMIService.Get('Win32_Processor');
if FWbemObject.Architecture=9 then //is a 64 bits processor
  if  FWbemObject.Family=131 then  //all 64-bit AMD processors are identified by using a Family attribute value of 0x83 (131).

从这里您可以使用Architecture,Family,Manufacturer和tohers属性来确定处理器类型。

答案 1 :(得分:2)

您可以尝试%PROCESSOR_IDENTIFIER%环境变量。

在AMD系统上,值以“AuthenticAMD”结束。

在英特尔系统上,值以“GenuineIntel”结尾。

(至少对于我检查过的少数系统)

答案 2 :(得分:1)

如果Msix64Intel Windows安装程序属性确定它,您是否可以使用组合?这显然是假设为AMD64处理器正确设置了Intel属性。还有Intel64属性,但只显示处理器是否为Itanium,我认为你并不困扰。