3

Visual Studio C++ コンパイラ、コマンド ライン コンパイラ オプション/favor:AMD64を提供し、 /favor:INTEL64AMD64 または Intel64 プロセッサをそれぞれ最適化します。現在、AMD64 と Intel64 という用語は、ほとんどの目的で本質的に互換性がありますが、コンパイラが最適化できるいくつかの違いがあります。

Microsoft Windows 7 で、アプリケーションのインストール時に AMD64 システムと INTEL64 システムのどちらにインストールしているかを確認する信頼できる方法はありますか?

私はインストーラーに InnoSetup と WiX を使用しており、AMD64 または INTEL64 CPU に基づいてインストールするバージョンを選択することについて推測しています。


編集:振り返っていくつかのメモ

最後に、RRUZAndrew Cooperからの回答はどちらも、この問題にアプローチするための優れた堅実な戦略を示しましたが、どちらも将来的に確実に証明されるものではないため、個人的には/favor:blend私のプロジェクトのデフォルトに固執するつもりです.

4

3 に答える 3

5

WMi クラスを使用できますWin32_Processor。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

Msix64IntelWindows インストーラーのプロパティを組み合わせて判断することはできませんか? これは明らかに、Intelプロパティが AMD64 プロセッサ用に正しく設定されていることを前提としています。プロパティもありIntel64ますが、それはプロセッサが Itanium のものであるかどうかだけを示します。

于 2012-05-09T08:41:40.383 に答える