Frage

Eine gute Nachricht: Ein Major Release ist in der Tasche

Schlechte Nachrichten: Ich habe gerade herausgefunden (2 Wochen zu spät), dass einige Leute haben nicht MSXML 6 auf ihren Maschinen und die neuen Installer sind rollen wir heraus erfordert.

Eine gute Nachricht: Wir können eine MSI-Datei verteilen MSXML installieren

Schlechte Nachrichten: Es gibt drei MSI-Dateien aus, einen ‚normalen‘ zu wählen, eine Endung in ia64 und ein in x64 endet.

Ich habe zu meiner Verfügung, Delphi 7, C ++ und um ... Batch-Dateien ... Wie kann ich einer von denen praktisch Setup.exe die machen, die die richtige MSI wählen automatisch zu starten.

War es hilfreich?

Lösung

Kurze Antwort: Verwenden Sie die GetSystemInfo Funktion des Windows-API, um herauszufinden, ob das System 32-Bit oder 64-Bit ist.

Beispielcode:

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.

Die beiden häufigsten Ausgänge sind 'Intel' (32-Bit x86) und 'AMD64' (64-Bit x64). In der Tat, können Sie mehr oder weniger Vertrauen, dass Sie einen von denen bekommen.

Nun, in Wirklichkeit glaube ich, dass das obige Programm wird immer return 'Intel' (32-bit x86), da alle Delphi-Anwendungen sind 32-Bit, und so sind sie unter einem 64 emuliert -Bit-Fenster (mit WOW64.) - gibt es keine 64-Bit-Version der Delphi-Compiler und IDE

So ist die true Architektur des Systems, unabhängig von Emulation zu erhalten, müssen Sie die GetNativeSystemInfo Funktion. Es gibt keine Wrapper für diese Funktion, so dass Sie es sich von kernel32.dll importieren müssen.

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.

Andere Tipps

Sie können die IA64 vergessen, die für Itanium-Systeme ist. Ich hätte gerne ein Tool verwenden, um ein Setup zu erstellen (es gibt ausgezeichnete freie Plätze, wie InnoSetup). Sie werden erkennen, welche Art von System das Setup-up auf ausgeführt wird, und lassen Sie das richtige Installationsprogramm von msxml laufen. Wenn das Tool den Windows Installer-Engine unterstützt direkt kann es von Vorteil, Mergemodule (MSM) in Anspruch nehmen benötigt Runtimes zu verteilen, sonst ziemlich einfach ist, eine msi vom Installationsprogramm zu starten. Sie können auch Ihre eigenen Installer schreiben, aber Sie bekommen eine andere App zu schreiben, zu testen und mantain. Ich würde Vorteil bestehender für eine solche Aufgabe übernehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top