Pregunta

Buenas noticias: Una versión principal está en la bolsa

Las malas noticias: Me acabo de enterar (2 semanas demasiado tarde) que algunas personas no tienen MSXML 6 en sus máquinas y el nuevo instalador estamos desarrollando así lo requiere.

Buenas noticias: Podemos distribuir un archivo MSI para instalar MSXML

Las malas noticias: Hay tres archivos MSI para elegir, uno 'normal' uno, uno que termina en IA64 y uno que termina en x64.

tengo a mi disposición, Delphi 7, C ++ y um ... Los archivos por lotes ... ¿Cómo hago una de esas útil Setup.exe de que elija el MSI derecho a poner en marcha automáticamente.

¿Fue útil?

Solución

Breve respuesta: Utilice el GetSystemInfo función de la API de Windows para saber si el sistema es de 32 bits o 64 bits.

Ejemplo código:

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.

Las dos salidas más comunes son 'Intel' (x86 32-bit) y 'AMD64' (x64 de 64 bits). De hecho, puede hacer más o menos confianza de que obtendrá uno de ellos.

Ahora, en realidad, creo que el anterior programa siempre de retorno 'de Intel (x86 de 32 bits), ya que todas las aplicaciones Delphi son de 32 bits, por lo que se emulan en virtud de un 64 bits de Windows (utilizando WOW64) -. no hay una versión de 64 bits del compilador de Delphi y el IDE

Así que para obtener el true arquitectura del sistema, independientemente de la emulación, usted tiene que utilizar el GetNativeSystemInfo función. No hay un contenedor para esta función, por lo que tiene que importar a sí mismo de 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.

Otros consejos

Se puede olvidar el IA64 que es para los sistemas Itanium. Que haría uso de una herramienta para crear una configuración (hay excelentes que son gratis, como InnoSetup). Se detectarán qué tipo de sistema de la instalación hasta se está ejecutando sobre, y que pueda ejecutar el instalador apropiado de msxml. Si la herramienta es compatible con el motor de Windows Installer directamente puede tomar ventaja de los módulos de combinación (MSM) para distribuir los tiempos de ejecución necesarios, de lo contrario es bastante fácil de ejecutar un msi desde el instalador. También puede escribir su propio instalador, pero se obtiene otra aplicación para escribir, probar y MANTENER. Me aprovecho de las ya existentes para tal tarea a.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top