2017-06-19 4 views
0

Nous utilisons Qt Installer Framework pour créer nos programmes d'installation de produits. La plupart des choses fonctionnent assez bien, mais il y a encore des problèmes non résolus.Placeholder de version dans le script d'installation

Chaque fois que nous créons une nouvelle version du produit, ce qui arrive assez fréquemment, nous devons mettre à jour le contenu de la balise <Version> à l'intérieur du package.xml. Mais nous devons également changer le nom du lien créé par l'installateur dans le installscript.qs, de sorte que le client puisse distinguer entre deux versions installées en parallèle du programme.

E.g. ici un lien comme MyApplication-2.1 devrait apparaître dans le menu de démarrage après l'installation.

Component.prototype.createOperations = function() 
{ 
    try { 
     // call the base create operations function 
     component.createOperations(); 
     component.addOperation("CreateShortcut", "@[email protected]/bin/MyApplication-2.1-vc14.exe", "@[email protected]/MyApplication-2.1.lnk"); 
    } catch (e) { 
     print(e); 
    } 
} 

Malheureusement, on ne peut pas écrire @[email protected] ou @[email protected], au lieu de 2.1, se référant au contenu de la balise <Version> du package.xml. Au lieu de @[email protected] et aussi @[email protected] font apparemment référence au contenu de la balise <Version> à l'intérieur du config.xml, ce qui n'est pas le comportement souhaité.

Mon problème est maintenant, que j'ai besoin de synchroniser chaque fois les numéros de versions, ce qui semble être très sujet aux erreurs. Y a-t-il des solutions de contournement?

+0

Vous pouvez écrire un script pour extraire 'Version' de' packages.xml', puis créer une variable pour la version de l'application qui l'ajoute et l'utiliser pour 'TargetDir' et' StartMenuDir' dans 'CreateShortcut'. – Azeem

Répondre

0

Sur Linux, j'ai utilisé sed, sur la base this:

Dans le fichier qmake j'ai mis en place pour générer le programme d'installation:

# Generate version numbers in XML files 
DATE_CMD="date --rfc-3339=date" 
SED_DATE_CMD="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|@[email protected]|`$$DATE_CMD`|g\" \"{}\" \;" 
SED_VERSION_CMD="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|@[email protected]|$${VERSION}|g\" \"{}\" \;" 
SED_DATE_UNDO="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<ReleaseDate>`$$DATE_CMD`<|<ReleaseDate>@[email protected]<|g\" \"{}\" \;" 
SED_VERSION_UNDO="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<Version>$${VERSION}<|<Version>@[email protected]<|g\" \"{}\" \;" 

offlineInstaller.commands = \ 
    $$SED_VERSION_CMD && \ 
    $$SED_DATE_CMD && \ 
    $$QTIFWDIR/bin/binarycreator --offline-only \ 
     -c $$PWD/config/config.xml -p $$PWD/packages $$offlineInstaller.target && \ 
    $$SED_VERSION_UNDO && \ 
    $$SED_DATE_UNDO 

Cela remplace le @ @ VERSION et @ DATE @ dans les fichiers XML, construit, puis les remet. Une meilleure solution pourrait être de copier les fichiers hors de l'arborescence source.

+0

Je vois maintenant que votre problème est un peu différent, mais cela peut être adapté pour avoir différentes variables VERSION dans différents paquets. Ma frustration était l'inverse de la vôtre: je voulais juste utiliser la version du produit, mais QtIFW rend la version du paquet obligatoire. – Yuriy