質問

良いニュース:主要なリリースがバッグに入っています!

悪いニュース:私はちょうど(2週間遅すぎる)マシンにMSXML 6を持っていない人もいれば、私たちが展開している新しいインストーラーにはそれが必要であることがわかりました。

良いニュース:MSIファイルを配布してMSXMLをインストールできます

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

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

役に立ちましたか?

解決

短い答え:使用してください GetSystemInfo Windows 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ビットウィンドウ(WOW64を使用)の下でエミュレートされているため、「Intel」(32ビットx86)を返します。

したがって、を取得するために 本当です システムのアーキテクチャは、エミュレーションに関係なく、 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.

他のヒント

イタニウムシステム用のIA64を忘れることができます。ツールを使用してセットアップを作成します(InnoSetupのような優れた無料のツールがあります)。セットアップが実行されているシステムの種類を検出し、MSXMLの適切なインストーラーを実行できます。ツールがWindowsインストーラーエンジンを直接サポートしている場合、マージモジュール(MSM)を利用して必要なランタイムを配布できます。そうでなければ、インストーラーからMSIを実行するのは非常に簡単です。自分のインストーラーを書くこともできますが、別のアプリを書き込み、テストし、Mantainを入手できます。私はそのようなタスクのために既存のものを利用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top