75 votes

Comment puis-je définir automatiquement la version de mon installateur Inno Setup en fonction de la version de mon application ?

J'utilise Inno Setup pour générer le programme d'installation de mon application. Comment puis-je définir le numéro de version du fichier setup.exe ( VersionInfoVersion ) généré par Inno pour correspondre automatiquement au numéro de version de mon application ? Maintenant, chaque fois que je déploie une nouvelle version de mon application, je dois mettre à jour le numéro de version manuellement.

Maintenant, je fais ça :

[Setup]
VersionInfoVersion=1.2.2.0 //writing the value manually

Je veux quelque chose comme ça :

[Setup]
VersionInfoVersion={Get the version of my app}

114voto

RRUZ Points 98685

Vous pouvez utiliser le préprocesseur Inno Setup GetVersionNumbersString comme ceci

#define ApplicationName 'Application Name'
#define ApplicationVersion GetVersionNumbersString('Application.exe')
[Setup]
AppName={#ApplicationName}
AppVerName={#ApplicationName} {#ApplicationVersion}
VersionInfoVersion={#ApplicationVersion}

7 votes

Oh il semble que j'ai dû mettre le chemin complet de mon exe... pas seulement le nom de l'exe comme dans l'exemple.

4 votes

Pourquoi n'est-il pas possible d'utiliser #define ApplicationVersion GetFileVersion({#ApplicationName}) ?

2 votes

@NickG : le chemin relatif est aussi suffisant

17voto

Malick Points 2318

Une autre façon de le faire est d'utiliser un argument de ligne de commande :

[Setup]           
AppVersion={#MyAppVersion}

et vous appelez votre script comme suit depuis un cmd :

cd C:\Program Files (x86)\Inno Setup 5

iscc /dMyAppVersion="10.0.0.1" "C:\MyPath\MyScript.iss"

Il émule #define MyAppVersion="10.0.0.1" dans l'iss script.


Si vous utilisez CakeBuild vous pouvez passer cet argument comme

 string CurrentVersion  = "10.0.0.1";
 InnoSetupSettings settings = new InnoSetupSettings();
 settings.Defines=   new Dictionary<string, string>
            {
            { "MyAppVersion", CurrentVersion },
            };
   InnoSetup("C:\MyPath\MyScript.iss", settings);

6voto

Jens-André Koch Points 3506

Dans le cas où vous avez un pur webinstaller, la solution acceptée ne fonctionnera pas, parce que vous n'aurez simplement pas d'application.exe pour obtenir le numéro de version.

J'utilise Nant et un build.xml avec des propriétés de numéro de version, que je modifie manuellement, avant de reconstruire les installateurs innosetup.

Mes fichiers *.iss contiennent un jeton spécial @APPVERSION@, qui est remplacé par le numéro de version lors de la vérification de la version. par le numéro de version pendant le processus de construction. Ceci est fait via une opération de copie avec une chaîne de filtres appliquée, voir ci-dessous.

InnoSetup script (*.iss)

// the -APPVERSION- token is replaced during the nant build process
#define AppVersion "@APPVERSION@"

nant build.xml :

<!-- Version -->
<property name="product.Name"           value="My Software"/>
<property name="version.Major"          value="1"/>
<property name="version.Minor"          value="2"/>
<property name="version.BuildNumber"    value="3"/>
<property name="product.Version" 
          value="${version.Major}.${version.Minor}.${version.BuildNumber}"/>

<!-- build task -->
<target name="bump-version"
        description="Inserts the current version number into the InnoScript.">
        <copy todir="${dir.Build}" overwrite="true">
            <fileset basedir="${dir.Base}/innosetup/">
                <include name="product-webinstaller-w32.iss"/>
                <include name="product-webinstaller-w64.iss"/>
            </fileset>
            <filterchain>
                <replacetokens>
                    <token key="APPVERSION" value="${product.Version}"/>
                </replacetokens>
            </filterchain>
        </copy>
</target>

4voto

JanRK Points 69

J'ai eu quelques problèmes pour que cela fonctionne, alors j'ai juste contribué à ma solution.

app.iss :

[Setup]
#include "Config.txt"

#define AppVersion GetFileVersion("Input\" + AppExec)

AppName={#AppName}
AppVersion={#AppVersion}

Config.txt :

#define AppName "App"
#define AppExec "App.exe"

4voto

Flo Points 40

Comme d'autres l'ont mentionné, le GetFileVersion o GetStringFileInfo Les fonctions du préprocesseur peuvent être utilisées pour cela.

Quelques informations importantes, des améliorations et des ajouts utiles :

  • Vous pouvez soit utiliser un chemin absolu vers l'exe, soit un chemin relatif au fichier .iss
  • Vous pouvez inclure des définitions existantes dans votre déclaration en écrivant simplement leur nom, et concaténer des définitions avec la balise + opérateur :
    #define MyAppPath "..\Win32\Release\" + MyAppExeName
  • Si vous le souhaitez, vous pouvez facilement supprimer certaines parties du numéro de version sur la droite en utilisant la fonction RemoveFileExt par exemple, convertir 3.1.2.0 en 3.1.2 :
    #define MyAppVersion RemoveFileExt(GetFileVersion(MyAppPath))
  • Vous pouvez utiliser les définitions MyAppExeName y MyAppPath dans les options suivantes comme Messages , Files o Icons

Exemple de travail :

#define MyAppName "Application Name"
#define MyAppExeName "Application.exe"        
#define MyAppPath "..\Win32\Release\" + MyAppExeName
#define MyAppVersion RemoveFileExt(GetFileVersion(MyAppPath))

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
VersionInfoVersion={#MyAppVersion}
OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Windows

...

[Messages]
SetupWindowTitle=Setup - {#MyAppName} {#MyAppVersion}

...

[Files]
Source: {#MyAppPath}; DestDir: "{app}"; Flags: ignoreversion; Tasks: desktopicon

...

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X