3

Visual Studio C++ 编译器提供命令行编译器选项/favor:AMD64/favor:INTEL64分别针对 AMD64 或 Intel64 处理器进行优化。现在,术语 AMD64 和 Intel64在大多数情况下基本上可以互换,但编译器可以优化一些差异

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

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


编辑:回顾的一些笔记

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

4

3 回答 3

5

您可以使用Win32_ProcessorWMi 类,从 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).

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

于 2012-05-08T05:57:53.393 回答
2

你可以试试%PROCESSOR_IDENTIFIER%环境变量。

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

在 Intel 系统上,该值以“GenuineIntel”结尾。

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

于 2012-05-08T04:33:05.753 回答
1

Msix64如果和Intelwindows 安装程序属性确定它,您不能使用组合吗?这显然是假设Intel为 AMD64 处理器正确设置了该属性。也有该Intel64属性,但这仅显示处理器是否是安腾处理器,我认为您不会在意。

于 2012-05-09T08:41:40.383 回答