如何选择处理器架构来安装带Delphi的MSI

时间:2010-08-10 13:14:16

标签: delphi windows-installer installation msiexec processor-architecture

好消息:主要版本已经发布了!

坏消息:我刚刚发现(2周太晚了)有些人在他们的机器上没有MSXML 6,而我们推出的新安装程序需要它。

好消息:我们可以分发MSI文件来安装MSXML

坏消息:有三个MSI文件可供选择,一个是'普通'文件,一个以ia64结尾,一个以x64结尾。

我可以随意使用Delphi 7,C ++和嗯...批处理文件...如何制作其中一个方便的Setup.exe,选择正确的MSI自动启动。

2 个答案:

答案 0 :(得分:2)

简答:使用Windows API的GetSystemInfo功能查明系统是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.

两个最常见的输出是'Intel'(32位x86)和'AMD64'(64位x64)。事实上,你可以或多或少地相信你会得到其中之一。

现在,实际上,我相信上面的程序将总是返回'Intel'(32位x86),因为所有Delphi应用程序都是32位的,所以它们是在64下模拟的-bit Windows(使用WOW64) - 没有64位版本的Delphi编译器和IDE。

因此,要获得系统的 true 架构,无论是否进行仿真,都必须使用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.

答案 1 :(得分:1)

您可以忘记用于Itanium系统的IA64。 我会使用一个工具来创建一个设置(有很好的免费设置,比如InnoSetup)。他们将检测正在运行的设置类型,并让您运行正确的msxml安装程序。如果该工具直接支持Windows Installer引擎,它可以利用合并模块(msm)来分发所需的运行时,否则很容易从安装程序运行msi。 您也可以编写自己的安装程序,但是您可以使用另一个应用程序来编写,测试和保护。我会利用现有的优势来完成这项任务。