Est-il possible d'obtenir Inno Setup pour lire la version du fichier du fichier exécutable principal et définir le nom de la configuration créée pour quelque chose comme « myapp_setup_1_0_3708_19805.exe »?Le nom du fichier d'installation peut-il être dérivé du numéro de version du fichier exécutable?
Répondre
Vous devriez pouvoir comme ceci:.
(je n'ai pas essayé récemment, mais il a certainement travaillé en 2007 quand j'utilisais InnoSetup de cette façon, il pourrait avoir besoin de légères modifications si la syntaxe de Inno a changé depuis.)
#define MainBinaryName "MyMainFile.exe"
#define SetupBaseName "setup_mytool_"
#define AppVersion GetFileVersion(AddBackslash(SourcePath) + MainBinaryName)
#define AVF1 Copy(AppVersion, 1, Pos(".", AppVersion) - 1) + "_" + Copy(AppVersion, Pos(".", AppVersion) + 1)
#define AVF2 Copy(AVF1, 1, Pos(".", AVF1 ) - 1) + "_" + Copy(AVF1 , Pos(".", AVF1 ) + 1)
#define AppVersionFile Copy(AVF2, 1, Pos(".", AVF2 ) - 1) + "_" + Copy(AVF2 , Pos(".", AVF2 ) + 1)
[Setup]
OutputBaseFilename={#SetupBaseName + AppVersionFile}
Si MyMainFile.exe était la version 1.2.3.4 alors que devrait appeler le programme d'installation terminé setup_mytool_1_2_3_4.exe
le AVF1, AVF2, etc. truc est juste là pour remplacer le points (.) dans le numéro de version avec sous scores (_) pour éviter de causer des problèmes avec des choses qui ne peuvent pas faire face à beaucoup de points dans un nom de fichier.
; Get the App Version from Main Program
; This Is Full App Version Major.Minor.Build.Revision
; Store First 3 Parts of Version in ShortAppVersion to be used for SBS Assembly Installation Major.Minor.Build
#dim Version[4]
#expr ParseVersion("MainProgram.exe", Version[0], Version[1], Version[2], Version[3])
#define AppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2]) + "." + Str(Version[3])
#define ShortAppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2])
Une façon beaucoup plus propre de faire cela consiste à utiliser la fonction StringChange
, ce qui permet de remplacer les points avec quelque chose d'autre:
#define MainBinaryName "MyMainFile.exe"
#define SourcePath "Path/To/File"
#define SetupBaseName "setup_mytool_"
#define AppVersion GetFileVersion(AddBackslash(SourcePath) + MainBinaryName)
#define AppVersionFile StringChange(AppVersion, ".", "_")
[Setup]
OutputBaseFilename={#SetupBaseName + AppVersionFile}
De plus, si vous ne voulez pas montrer tous les quatre numéros de version (par exemple, vous voulez dire 1.0.1
au lieu de 1.0.1.0
), vous pouvez remplacer la ligne AppVersion
ce qui suit:
#define NumberOfVersionPoints 3
#define AppVersion Copy(GetFileVersion(AddBackslash(SourcePath) + MainBinaryName), 0, NumberOfVersionPoints * 2 - 1)
Le code de 'NumberOfVersionPoints' ne fonctionne que si le numéro de version ne contient pas d'éléments à deux chiffres (par exemple, « 1.2.10.0 » convertit à tort « 1.2.1 »). – TypeIA
@TypeIA Avez-vous une idée de la façon de gérer ce cas? – Thunderforge
Je ne l'avais pas à l'époque, mais j'ai trouvé une solution sur la liste de diffusion Inno. Je viens de poster une nouvelle réponse ci-dessous. Merci de m'avoir initié! – TypeIA
GetFileVersion()
(décrit dans d'autres réponses) retourne une chaîne de caractères de la forme « Major.Minor.Rev.Build. » Si vous souhaitez accéder aux éléments individuels de sorte que vous pouvez formater la chaîne vous-même (par exemple, si vous voulez seulement « Major.Minor » ou « Major.Minor.Rev »), vous pouvez utiliser l'approche suivante du jrsoftware.innosetup mailing list:
#define VerMajor
#define VerMinor
#define VerRev
#define VerBuild
#define FullVersion=ParseVersion('PathTo.exe', VerMajor, VerMinor, VerRev, VerBuild)
#define MyAppVersion = Str(VerMajor) + "." + Str(VerMinor)
belle! a bien fonctionné, juste besoin le MainBinaryName guillemets :) (j'edited votre réponse) –
+1, je ne savais pas le préprocesseur pourrait être utilisé pour cela. Va enlever ma réponse. – mghie