Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 确定处理器是AMD64还是Intel64?_Visual C++_Wix_Inno Setup - Fatal编程技术网

Visual c++ 确定处理器是AMD64还是Intel64?

Visual c++ 确定处理器是AMD64还是Intel64?,visual-c++,wix,inno-setup,Visual C++,Wix,Inno Setup,VisualStudioC++编译器命令行编译器选项 /FAIL:AMD64 < /C>和/Fuff:IntL64 < /C> >分别为AMD64或ITEL64处理器优化。现在,AMD64和Intel64这两个术语用于大多数目的,但编译器可以对其进行优化 在Microsoft Windows 7上,是否有可靠的方法在应用程序安装时检查我们是安装在AMD64还是INTEL64系统上 我正在为安装程序使用InnoSetup和WiX,我正在考虑选择基于AMD64或INTEL64 CPU的安装版本 编

VisualStudioC++编译器命令行编译器选项<代码> /FAIL:AMD64 < /C>和/Fuff:IntL64 < /C> >分别为AMD64或ITEL64处理器优化。现在,AMD64和Intel64这两个术语用于大多数目的,但编译器可以对其进行优化

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

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


编辑:回顾中的一些注释


最后,和的答案都给出了很好的解决这个问题的可靠策略,但由于它们都不是真正可靠的未来证明,我个人将坚持默认的
/follow:blend
,用于我的项目。

您可以尝试
%PROCESSOR\u IDENTIFIER%
环境变量

在AMD系统上,该值以“AuthenticAMD”结尾

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

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

您可以使用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).

从这里,您可以使用体系结构、系列、制造商和其他属性来确定处理器类型。

如果使用和windows installer属性来确定处理器类型,是否可以使用组合?这显然是假设AMD64处理器的
Intel
属性设置正确。也有属性,但它只显示处理器是否是安腾处理器,我想您不会为此烦恼。

原始汇编程序x86
CPUID
指令将准确地告诉您使用的处理器。如果没有更高级的函数以更好的格式提供cpuid数据,我会非常惊讶。@HansPassant,这个链接提供了一些方便的信息,干杯。看起来很接近。此外,AMD系统似乎总是包含“AMD64”,而英特尔系统则包含“EM64T”或“Intel64”。这似乎比解析环境变量更健壮。