Вопрос

Хорошие новости: основной релиз в сумке!

Плохие новости: я только что узнал (2 недели слишком поздно), что у некоторых у некоторых у некоторых у некоторых людей MSXML 6 на своих машинах, а новый установщик, который мы выкатываем, требует этого.

Хорошие новости: мы можем распространить файл MSI для установки MSXML

Плохой новости: есть три файла MSI на выбор, один «нормальный» один, один конец в IA64 и один заканчивается в X64.

У меня в моем распоряжении, Delphi 7, C ++ и UM ... Пакетные файлы ... Как сделать один из этих удобных Setup.exe, которые выбирают правильный MSI, чтобы запустить автоматически.

Это было полезно?

Решение

Краткий ответ: используйте GetSystemInfo Функция API Windows, чтобы узнать, является ли система 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-битными окнами (используя WOW64) - нет 64-битного выпуска компилятора Delphi и IDE.

Так, чтобы получить истинный архитектура системы, независимо от эмуляции, вы должны использовать 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, которая предназначена для iTanium Systems. Я бы использовал инструмент для создания установки (есть отличные бесплатные, такие как innoSetup). Они обнаружит, какую систему запущена настройка, и позволит вам запустить правильный установщик MSXML. Если инструмент поддерживает двигатель установщика Windows напрямую, он может воспользоваться модулями MERGE (MSM) для распространения необходимых runtimes, в противном случае довольно легко запустить MSI от установщика. Вы также можете написать свой собственный установщик, но вы получите еще одно приложение для записи, тестирования и Mantain. Я бы воспользовался существующими для такой задачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top