2008-12-10 5 views
16

Fondamentalement ce dont j'ai besoin est un moyen automatisé de mettre à jour le numéro de version du produit dans WiX (3.0 avec Votive etc), et ensuite obtenir ce numéro de version dans un Inno Setup " J'ai presque le processus principalement automatisé, mais les numéros de version doivent encore être mis à jour manuellement ce qui n'est évidemment pas idéal, mais je n'ai pas réussi à trouver comment transmettre des valeurs à Inno Setup au moment de la compilation (et comment les référencer), et dans le projet WiX j'ai besoin de savoir comment référencer le numéro de version d'un projet différent dans la même solution dans Visual Studio 2008numéro de version automatisé-build avec WiX, Inno Setup, et VS2008

Répondre

26

Pas besoin de passer quoi que ce soit! Vous pouvez simplement laisser le préprocesseur InnoSetup lire directement les informations de version à partir de la ressource de version binaire, par ex.:

#define AppName "My App" 
#define SrcApp "MyApp.exe" 
#define FileVerStr GetFileVersion(SrcApp) 
#define StripBuild(str VerStr) Copy(VerStr, 1, RPos(".", VerStr)-1) 
#define AppVerStr StripBuild(FileVerStr) 

[Setup] 
AppName={#AppName} 
AppVersion={#AppVerStr} 
AppVerName={#AppName} {#AppVerStr} 
UninstallDisplayName={#AppName} {#AppVerStr} 
VersionInfoVersion={#FileVerStr} 
VersionInfoTextVersion={#AppVerStr} 
OutputBaseFilename=MyApp-{#FileVerStr}-setup 

Avant la version 5.4.1 (2011-02-09) ISPP n'était pas inclus dans le package InnoSetup par défaut. Vous deviez télécharger le pack de démarrage rapide InnoSetup: http://www.jrsoftware.org/isdl.php#qsp (merci @Gwyn, pour la mise à jour)

+2

Wow! C'est brillant! +1 Agacé que ISPP ne fait pas partie du package par défaut. – Rob

+0

+1 Vous pouvez extraire toutes les valeurs versioninfo de votre exe. J'ai utilisé Inno (et ISTool) depuis plusieurs années maintenant pour tous mes produits, et je pense que c'est plutôt ... beau. – Spike0xff

+2

À partir de 5.4.1 (2011-02-09), il est ... –

1

La façon dont je le fais est avec un script WSF (j'utilise JavaScript mais vous pouvez utiliser VBScript ou même un script SH en utilisant Cygwin) qui crée un fichier d'en-tête contenant des définitions pour les numéros de version. Vous pouvez utiliser l'instruction Wix <include> pour faire glisser le numéro de version.

Pour Inno Setup, je crée un fichier .iss contenant le numéro de version, # compris dans le script iss principal. Je suis chez moi mais je peux poster un code d'échantillon demain si vous voulez.

EDIT: J'ai oublié de mentionner que j'exécute le script qui génère les fichiers contenant le numéro de build au cours de la phase de pré-construction de mes différents projets VS.

+0

J'apprécierais le code d'exemple si cela ne vous dérange pas :) Merci – Davy8

0

Je trouve cela pour la section de configuration Inno qui ressemble à ça marcherait:

http://agiletracksoftware.com/blog.html?id=4

+1

Ouais, mais pourquoi passer par tous ces problèmes quand vous pouvez simplement demander au compilateur Inno d'obtenir les numéros de la source d'informations de version binaire source (voir ma réponse)? Évitez le double-ménage (comme mettre manuellement la version dans la ressource et dans un fichier texte) dans la mesure du possible. –

1

Quelques exemples de code comme promis. Cela devrait être suffisant pour vous aider à démarrer.

Le code JavaScript suivant peut être utilisé pour créer un fichier InnoSetup iss contenant le numéro de version. Le fichier réel ressemblera à ceci:

VersionInfoVersion=1.2.3.12345 
AppVerName=My App v1.2.3.12345 

Le script principal Inno Setup comprendra ce fichier en ajoutant ce qui suit à la fin de la [Configuration] section:

[Setup] 
AppId={{...}} 
... 

#include "version.iss" 

Voici la JavaScript (ce serait enregistré en tant que fichier séparé - version.js par exemple):

createInnoSetupIncludeFile("My App", 1, 2, 3, 12345, "version.iss"); 

function createInnoSetupIncludeFile(appName, verMajor, verMinor, verSubMinor, buildNumber, headerFileName) 
{ 
    var versionString = verMajor + "." + verMinor + "." + verSubMinor + "." + buildNumber; 
    var fileSystemObject = WScript.CreateObject("Scripting.FileSystemObject"); 
    var fileObject = fileSystemObject.CreateTextFile(headerFileName, true); 
    fileObject.WriteLine("VersionInfoVersion=" + versionString); 
    fileObject.WriteLine("AppVerName=" + appName + " v" + versionString); 
    fileObject.Close(); 
    fileObject = null; 
    fileSystemObject = null; 
} 

Vous pouvez modifier ce script pour créer le fichier version.iss i n un dossier différent.

Enfin, vous devez exécuter le JavaScript - le meilleur endroit serait dans l'événement de pré-construction de votre projet Visual Studio. Ajoutez ce qui suit:

cscript version.js //NoLogo 

Vous devez modifier cela pour créer également un fichier d'inclusion compatible Wix. J'avais l'habitude de faire cela, mais j'ai abandonné Wix en faveur d'Inno Setup, donc je n'ai pas ce code à portée de main. Il existe cependant un mécanisme pour un script Wix, ce qui devrait vous orienter dans la bonne direction - le concept est le même - générer un fichier texte qui définit le numéro de version et l'inclure ensuite.

Espérons que cela aide.

+0

Merci, je ne sais pas si j'irai avec le vôtre ou celui d'Oliver mais +1 pour vous deux :) – Davy8

8

Vous pouvez obtenir la version du produit pour WiX à partir d'une version de fichier dans votre paquet. La syntaxe est quelque chose comme:

<Product Version="$(var.FileVersion.FileId)"> 

Ou vous pouvez fournir sur la ligne de commande à l'aide de la bougie « -dVersionFromCommandLine = 1.0.0.0 » switch avec la syntaxe comme:

<Product Version="$(var.VersionFromCommandLine)"> 

Ou fonctionne dans le dernier builds de WiX v3. Seul ce dernier fonctionne sur WiX v2.

+0

Rob a répondu à cela dans http://stackoverflow.com/questions/626033/how-can-i-set-the-wix-installer-version-to-the-curent-build-version plus correctement je pense. Vous devez utiliser! (Bind.FileVersion.MyFileId) – vasquez

Questions connexes