1

朗報: メジャー リリースがバッグに入っています。

悪いニュース: マシンに MSXML 6 がインストールされていない人がいて、ロールアウトしている新しいインストーラーでそれが必要であることがわかりました (2 週間遅すぎます)。

朗報: MSI ファイルを配布して、MSXML をインストールできます

悪いニュース: 選択できる MSI ファイルは 3 つあります。1 つは「通常の」ファイル、1 つは ia64 で終わるファイル、もう 1 つは x64 で終わるファイルです。

Delphi 7、C++、およびええと... バッチ ファイル... 適切な MSI を選択して自動的に起動する便利な Setup.exe の 1 つを作成するにはどうすればよいですか。

4

2 に答える 2

2

簡単な答え: GetSystemInfoWindows API の関数を使用して、システムが 32 ビットか 64 ビットかを調べます。

コード例:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  si: TSystemInfo;

const
  PROCESSOR_ARCHITECTURE_AMD64 = 9;
  PROCESSOR_ARCHITECTURE_IA64 = 6;
  PROCESSOR_ARCHITECTURE_INTEL = 0;
  PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;

begin

  GetSystemInfo(si);
  case si.wProcessorArchitecture of
    PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
    PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
    PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
    PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
  end;

  Readln;

end.

最も一般的な 2 つの出力は、'Intel' (32 ビット x86) と 'AMD64' (64 ビット x64) です。実際、あなたはそれらのうちの1つを手に入れることを多かれ少なかれ信頼することができます.

実際には、すべての Delphi アプリケーションは 32 ビットであり、64 ビット Windows で (WOW64 を使用して) エミュレートされるため、上記のプログラムは常に「Intel」(32 ビット x86) を返すと思います。 Delphi コンパイラおよび IDE の 64 ビット リリースではありません。

したがって、エミュレーションに関係なく、システムの真のアーキテクチャを取得するには、GetNativeSystemInfo関数を使用する必要があります。この関数にはラッパーがないため、kernel32.dll から自分でインポートする必要があります。

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  si: TSystemInfo;

const
  PROCESSOR_ARCHITECTURE_AMD64 = 9;
  PROCESSOR_ARCHITECTURE_IA64 = 6;
  PROCESSOR_ARCHITECTURE_INTEL = 0;
  PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;

procedure GetNativeSystemInfo(var lpSystemInfo: TSystemInfo); stdcall; external kernel32 name 'GetNativeSystemInfo';

begin

  GetNativeSystemInfo(si);
  case si.wProcessorArchitecture of
    PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
    PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
    PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
    PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
  end;

  Readln;

end.
于 2010-08-10T13:50:08.633 に答える
1

Itanium システム用の IA64 は忘れて構いません。ツールを使用してセットアップを作成します (InnoSetup などの無料の優れたツールがあります)。セットアップが実行されているシステムの種類を検出し、msxml の適切なインストーラーを実行できるようにします。ツールが Windows インストーラー エンジンを直接サポートしている場合、マージ モジュール (msm) を利用して必要なランタイムを配布できます。それ以外の場合は、インストーラーから msi を実行するのが非常に簡単です。独自のインストーラーを作成することもできますが、別のアプリを作成、テスト、管理する必要があります。そのようなタスクには既存のものを利用します。

于 2010-08-10T15:21:07.517 に答える