Question

Bonnes nouvelles: Une version majeure est dans le sac

Les mauvaises nouvelles: Je viens de découvrir (2 semaines trop tard) que certaines personnes ne sont pas MSXML 6 sur leurs machines et le nouvel installateur nous déroulons l'exige.

Bonnes nouvelles: Nous pouvons distribuer un fichier MSI pour installer MSXML

Les mauvaises nouvelles: Il y a trois fichiers MSI à choisir, un « normal » un, se terminant par un ia64 et se terminant en un x64.

J'ai à ma disposition, Delphi 7, C ++ et euh ... les fichiers de traitement par lots ... Comment puis-je faire un de ceux qui choisissent de Setup.exe pratique le droit MSI pour lancer automatiquement.

Était-ce utile?

La solution

Réponse courte: Utilisez le GetSystemInfo fonction de l'API Windows pour savoir si le système est 32 bits ou 64 bits.

Exemple de code:

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.

Les deux sorties les plus courantes sont 'Intel' (32-bit x86) et 'AMD64' (x64 64 bits). En fait, vous pouvez plus ou moins confiance que vous obtiendrez un.

Maintenant, en réalité, je crois que le programme ci-dessus va toujours retour « Intel » (x86 32 bits), car toutes les applications Delphi sont 32 bits, et donc ils sont émulées sous 64 Fenêtres -bit (en utilisant WOW64) -. il n'y a pas version 64 bits du compilateur Delphi et IDE

Donc, pour obtenir le true architecture du système, quel que soit l'émulation, vous devez utiliser le GetNativeSystemInfo de fonction. Il n'y a pas wrapper pour cette fonction, vous devez importer vous 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.

Autres conseils

Vous pouvez oublier l'IA64 qui est pour les systèmes Itanium. J'utiliser un outil pour créer une configuration (il y a excellents libres, comme InnoSetup). Ils détecteront quel type de système la mise en configuration est en cours d'exécution sur, et vous permettre d'exécuter le bon programme d'installation de MSXML. Si l'outil prend en charge le moteur Windows Installer directement, il peut tirer parti des modules de fusion (de VSM) pour distribuer runtimes nécessaires, sinon est assez facile à exécuter un msi de l'installateur. Vous pouvez également écrire votre propre programme d'installation, mais vous obtenez une autre application pour écrire, tester et mantenir. Je profite de ceux qui existent déjà pour tâche d'un tel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top