IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Concepteurs de composants, simplifiez leur installation


précédentsommaire

IV. Exemple d'installation (RxLib)

Allez pour le finish, on va se faire un petit plaisir : créer un exe d'installation pour la RXLibrary. Même pas peur :-)))

Nous allons nous conformer aux prescriptions de la page précédente de ce document et suivre les étapes indiquées.

IV-A. Rassembler les fichiers à installer

La RXLib pour Delphi 6 une fois décompressée est décomposée en dossiers Help et Units :

Image non disponible

Le dossier Units contient tous les sources des unités et des packages ainsi que les dcu. Notre installation devra reconstituer cette arborescence sur le poste d'installation. Nous aurons également besoin d'intégrer les fichiers bpl de la RX dans le pack d'install. Si la RX n'est pas encore installée dans votre environnement, il ne reste plus qu'à la compiler pour obtenir les fichiers *.bpl. Dans un premier temps il faut compiler les paquets d'exécution nommés :

  • rxctl6.dpk ;
  • rxdb6.dpk ;
  • rxbde6.dpk.

Ensuite, il faut compiler les paquets de conception (design-time) nécessaires à l'intégration dans l'EDI Delphi - sachant que ces paquets requièrent ceux précédemment compilés :

  • dclrx6.dpk ;
  • dclrxbd6.dpk ;
  • dcldxdb6.dpk.

Si la compilation s'est bien passée, nous obtenons les fichiers dcp et bpl dans le dossier $(Delphi)\Projects\bpl\ (dossier par défaut des fichiers dcp et bpl). Ces fichiers font partie de la future installation. On les installera dans les dossiers spécifiés dans les clés de registre respectives (cf. page précédente du présent tutoriel).

IV-B. Construire le script InnoSetup

Contrairement à une installation classique, l'installation des composants comporte quelques spécificités.

IV-B-1. S'assurer que Delphi 6 est installé

On passera par InnoSetup Extensions qui nous permet de paramétrer l'installation en pascal scripting. Dans la section code, fonction InitializeSetup, on vérifiera l'existence de Delphi 6 puis on initialisera des variables globales avec les chemins des BPL et des DCP, le tout grâce à des clés lues dans la base de registre :

 
Sélectionnez
var
  DelphiRoot: string;
  BPLPath: string;
  DCPPath: string;

function InitializeSetup : Boolean;
begin
  if GetDelphiRoot = '?' then
  begin
    MsgBox('Delphi 6 n''est pas installé sur votre PC'); 
    Result := False;
  end else
  begin
    //On récupère les chemins de destination des paquets compilés
    GetDPLOutput;
    GetDCPOutput;
    Result := True;
  end;
end;

IV-B-2. Récupérer les dossiers où installer la RXLib

Tous les chemins d'installation ne sont pas connus à l'avance, il faut parfois les définir après lecture de certaines clés de la base de registre. C'est pourquoi nous avons ajouté des fonctions qui récupèrent ces chemins.

Rappelons que les fonctions présentées ici (comme RegQueryStringValue) sont propres à InnoSetup Extensions et non pas à Delphi.

 
Sélectionnez
function GetDelphiRoot : string;
begin
  if not RegQueryStringValue(HKCU, 'Software\Borland\Delphi\6.0', 'RootDir', DelphiRoot) then
    Result := '?'
  else
    Result := DelphiRoot;
end;

function GetDPLOutput : string;
var p : integer;
begin
  RegQueryStringValue(HKCU, 'Software\Borland\Delphi\6.0\Library', 'Package DPL Output', BPLPath);
  p := Pos('$(DELPHI)', BPLPath);
  if p > 0 then BPLPath := DelphiRoot + Copy(BPLPath, 10, Length(BPLPath) - 9);
  Result := BPLPath;
end;

function GetDCPOutput : string;
var p : integer;
begin
  RegQueryStringValue(HKCU, 'Software\Borland\Delphi\6.0\Library', 'Package DCP Output', DCPPath);
  p := Pos('$(DELPHI)', DCPPath);
  if p > 0 then DCPPath := DelphiRoot + Copy(DCPPath, 10, Length(DCPPath) - 9);
  Result := DCPPath;
end;

IV-B-3. Réalisation du script

Maintenant que nous avons à notre disposition des fonctions utilitaires pour l'installation, il nous reste à énumérer la liste des fichiers à installer et leur emplacement :

 
Sélectionnez
...
Source: c:\Rx Library\Units\ICOLEDIT.PAS; DestDir: {app}\Units
Source: c:\Rx Library\Units\ICOLIST.dcu ; DestDir: {app}\Units
Source: c:\Rx Library\Units\ICOLIST.PAS ; DestDir: {app}\Units
Source: c:\Rx Library\Units\IMAGPRVW.dfm; DestDir: {app}\Units
Source: c:\Rx Library\Units\IMAGPRVW.PAS; DestDir: {app}\Units
...

Les bpl et dcp sont à installer dans le chemin indiqué respectivement dans les clés de registre HKCU\Software\Borland\Delphi\6.0\Library\Package DPL Output\ et …\Library\Package DCP Output\.

Au lieu d'exprimer un chemin de destination en dur, on délègue à InnoSetup la recherche de ce chemin en spécifiant la directive {code:function|parameter}, voici la liste des bibliothèques à installer (on les aura placées initialement dans un sous dossier \Lib du dossier source de la RX) :

 
Sélectionnez
Source: C:\Rx Library\Lib\rxdb6.bpl   ; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\dclrx6.bpl  ; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\dclrxbd6.bpl; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\dclrxdb6.bpl; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\rxbde6.bpl  ; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\rxctl6.bpl  ; DestDir: {code:ReadBPL|}
Source: C:\Rx Library\Lib\rxdb6.dcp   ; DestDir: {code:ReadDCP|}
Source: C:\Rx Library\Lib\dclrx6.dcp  ; DestDir: {code:ReadDCP|}
Source: C:\Rx Library\Lib\dclrxbd6.dcp; DestDir: {code:ReadDCP|}
Source: C:\Rx Library\Lib\dclrxdb6.dcp; DestDir: {code:ReadDCP|}
Source: C:\Rx Library\Lib\rxbde6.dcp  ; DestDir: {code:ReadDCP|}
Source: C:\Rx Library\Lib\rxctl6.dcp  ; DestDir: {code:ReadDCP|}

Les fonctions ReadBPL et ReadDCP (auxquelles on passe un paramètre vide) lisent simplement les variables globales qui ont été initialisées lors du InitializeSetup :

 
Sélectionnez
function ReadBPL(S : string) : string;
begin
  Result := BPLPath + S;
end;

function ReadDCP(S : string) : string;
begin
  Result := DCPPath + S;
end;

Enfin il reste à écrire des clés dans le registre indiquant à Delphi la présence des nouveaux paquets à prendre en compte pour la palette de composants. Il suffit d'ajouter dans la clé $(DELPHI)\Known Packages\ les chemins des paquets de conception bpl :

 
Sélectionnez
[Registry] 
Root: HKCU; Subkey: Software\Borland\Delphi\6.0\Known Packages; ValueType: string; ValueName: {code:ReadBPL|\dclrxdb6.bpl}; ValueData: Rx Library Database Components    ; Flags: uninsdeletevalue
Root: HKCU; Subkey: Software\Borland\Delphi\6.0\Known Packages; ValueType: string; ValueName: {code:ReadBPL|\dclrx6.bpl}  ; ValueData: Rx Library Controls and Tools     ; Flags: uninsdeletevalue
Root: HKCU; Subkey: Software\Borland\Delphi\6.0\Known Packages; ValueType: string; ValueName: {code:ReadBPL|\dclrxbd6.bpl}; ValueData: Rx Library BDE Database Components; Flags: uninsdeletevalue

Voilà, il ne vous reste plus qu'à compiler le setup et… le tour est joué !

Et pour vous remercier d'avoir lu le tutoriel jusqu'ici et vous encourager à suivre cette philosophie d'installation de composants sont disponibles en téléchargement :

Télécharger RXLibInstall.iis

Télécharger RXLibInstall.iis[22 ko] les sources RXLibInstall.iss du script d'installation InnoSetup Extensions ;
Télécharger l'exécutable final d'installation [5,4 Mo] l'exécutable final d'installation de la RXLib 2.75 (Setup_RX275.exe).

Voir aussi la bibliothèque de composants RxLib.

V. Conclusion

Finalement l'intégration automatique des librairies de composants dans Delphi n'est pas très compliquée puisqu'il suffit de les placer dans les bons dossiers et de renseigner en adéquation la base de registre. La désinstallation avec InnoSetup est automatique. Que ce soit pour constituer une installation personnelle de son environnement de composants ou pour distribuer vos créations, cette méthode séduira sans aucun doute les utilisateurs et encore plus ceux qui s'étaient préalablement confrontés à l'installation de la RX…

Reste un domaine non abordé, le cas où l'installation de vos composants doit s'effectuer dans un package déjà existant de l'environnement Delphi, par exemple le dclusr60.dpk. Une recompilation dans ce cas serait obligatoire, donc on devrait soit lancer cette compilation en appelant le compilateur DCC32.exe via un fichier batch, ou pourquoi pas passer par les API OpenTools : OTA et INTA services. On dépasse déjà l'objectif initial de ce tutoriel, mais c'est une méthode à creuser. Reste à débattre de l'intérêt d'intégrer vos nouveaux composants dans un paquet existant ou systématiquement dans des nouveaux paquets…

VI. Références


précédentsommaire

Copyright © 2002 Sylvain James. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.