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}
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}
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);
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>
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"
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")