2009-01-15 9 views
3

J'ai une application écrite en Delphi qui a plusieurs versions contenant des binaires et une base de données (MDB) avec des données de catalogue.Configuration d'INNO: Implémentation de la mise à jour de fichier basée sur différentes versions de l'application

Au cours du cycle de vie du produit, les correctifs/améliorations se trouvent dans le fichier de base de données ou dans certains fichiers binaires.

Les versions sont conservées dans le Registre.

Les utilisateurs peuvent avoir différentes versions du programme lorsqu'un nouveau correctif est disponible.

Désormais, les utilisateurs ont différentes versions comment mettre en œuvre le scénario suivant dans Inno Setup:

  1. Si l'utilisateur a la version A éviter l'installation.
  2. Si l'utilisateur possède la version B, copiez db over et file1, file2, file3.
  3. Si l'utilisateur possède la version C, mettez à jour le fichier1.

Quelle est la bonne façon d'implémenter cela dans l'installation d'Inno?

Répondre

2

Je ne sais pas si elle est la section bonne façon de le faire, mais vous pouvez utiliser le [code] et les drapeaux beforeInstall

comme si

[Files] 
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}') 
Source: "MYFILE.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}') 
Source: "MYDB.MDB"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}') 

[Code] 

function MyBeforeInstall(InstallPath): Boolean; 
begin 
    Result:= FALSE; 
    //Check if this file is ok to install 
    MsgBox(CurrentFileName , mbInformation, MB_OK); 
end; 

Ensuite, utilisez CurrentFileName pour déterminer si le fichier peut être installé, je ne suis pas sûr s'il quittera juste le programme d'installation si le résultat est faux, ou sautera le dossier individuel.

Vous pouvez également utiliser la section [Types]/[Composants] pour déterminer quels fichiers seront installés, mais je ne sais pas s'il existe un moyen de le sélectionner automatiquement.

2

Inno examinera les informations de version de fichier par défaut. Donc, si votre correctif n'a besoin que de mettre à jour un fichier lorsque la version du correctif est plus récente, ne faites rien; Inno se comporte déjà comme ça.

Si, d'autre part, votre correctif doit remplacer un fichier avec la même version (ou s'il n'y a pas d'informations de version dans le fichier), utilisez l'indicateur replacesameversion. Cela permet à Inno de comparer le contenu du fichier et de le remplacer s'il est différent. Voir l'aide pour les fichiers pour plus d'informations sur ce drapeau.

0

Vous pouvez créer des fonctions pour vérifier la version.

Voir this website pour plus de détails (http://agiletracksoftware.com/blog.html?id=4)

[Code] 
; Each data file contains a single value and can be loaded after extracted. 
; The filename and DestDir from the [Files] section must match the names 
; and locations used here 
function GetAppMajorVersion(param: String): String; 
    var 
      AppVersion: String; 
    begin 
      ExtractTemporaryFile('major.dat'); 
      LoadStringFromFile(ExpandConstant('{tmp}\major.dat'), AppVersion); 
      Result := AppVersion; 
    end; 

function GetAppMinorVersion(param: String): String; 
    var 
      AppMinorVersion: String; 
    begin 
      ExtractTemporaryFile('minor.dat'); 
      LoadStringFromFile(ExpandConstant('{tmp}\minor.dat'), AppMinorVersion); 
      Result := AppMinorVersion; 
    end; 

function GetAppCurrentVersion(param: String): String; 
    var 
      BuildVersion: String; 
    begin 
      ExtractTemporaryFile('build.dat'); 
      LoadStringFromFile(ExpandConstant('{tmp}\build.dat'), BuildVersion); 
      Result := BuildVersion; 
    end; 

extrait de code de Blog AgileTrack: Using Inno Setup to Create a Versioned Installer