web-dev-qa-db-fra.com

Comment définir automatiquement la version de mon programme d'installation 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 définir automatiquement le numéro de version du setup.exe (VersionInfoVersion) généré par Inno avec le 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}
60
Salvador

Vous pouvez utiliser la fonction Inno Setup Preprocessor GetFileVersion comme ceci

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

Une autre façon de le faire en utilisant n argument de ligne de commande :

[Setup]           
AppVersion={#MyAppVersion}

et vous appelez simplement votre script comme suit à partir d'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 le script iss.


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);
7
Malick

Si vous disposez d'un programme de désinstallation Web pur, la solution acceptée ne fonctionnera pas, car vous n'aurez tout simplement pas d'application.exe pour obtenir le numéro de version.

J'utilise Nant et un build.xml fichier avec les propriétés du numéro de version, que je bosse manuellement, avant de reconstruire les programmes d'installation innosetup.

Mes fichiers * .iss contiennent un jeton spécial @ APPVERSION @, qui est remplacé par le numéro de version lors du processus de génération. Cela se fait via une opération de copie avec une chaîne de filtres appliquée, voir ci-dessous.

Script InnoSetup (* .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>
5
Jens A. Koch

J'ai eu quelques problèmes pour que cela fonctionne, alors je ne fais que contribuer 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"
2
JanRK

Après un certain temps à essayer d'autres méthodes, la façon dont cela a fonctionné pour moi a été d'utiliser un chemin relatif (j'ai le fichier .iss dans un dossier et le fichier EXE deux niveaux ci-dessus).

; Extract File Version from EXE
#define MyAppVersion GetFileVersion("..\..\Release\CSClave.exe")
0
cdsaenz