2010-02-24 19 views

Respuesta

22

Usted debe ser capaz de esta manera:.

(no he probado esto recientemente pero ciertamente trabajado de nuevo en 2007 cuando yo estaba usando InnoSetup De esta manera se podría necesitar algunos cambios leves si la sintaxis de Inno ha cambiado desde entonces.)

#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 se MyMainFile.exe versión 1.2.3.4 a continuación, que debe llamar al instalador terminado setup_mytool_1_2_3_4.exe

el AVF1, AVF2, etc. material es sólo para reemplazar la otra puntos (.) en el número de versión con puntajes (_) para evitar causar problemas con cosas que no pueden hacer frente a muchos puntos en un nombre de archivo.

+0

preciosa! Funcionó bien, solo necesitaba el MainBinaryName entre comillas :) (Edité tu respuesta) –

+1

+1, no sabía que el preprocesador podría usarse para eso. Eliminaré mi respuesta – mghie

2
; 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]) 
2

Una manera mucho más limpia de hacer esto consiste en utilizar la función StringChange, que permite la sustitución de los puntos con otra cosa:

#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} 

Además, si usted no desea mostrar todos los cuatro números de versión (por ejemplo, usted quiere que diga 1.0.1 en lugar de 1.0.1.0), puede reemplazar la línea AppVersion con lo siguiente:

#define NumberOfVersionPoints 3 
#define AppVersion    Copy(GetFileVersion(AddBackslash(SourcePath) + MainBinaryName), 0, NumberOfVersionPoints * 2 - 1) 
+0

El código para 'NumberOfVersionPoints' solo funciona si el número de versión no contiene ningún elemento de dos dígitos (por ejemplo," 1.2.10.0 "se convierte erróneamente en" 1.2.1 "). – TypeIA

+0

@TypeIA ¿Tiene una idea de cómo manejar ese caso? – Thunderforge

+0

No lo tenía en ese momento, pero encontré una solución en la lista de correo de Inno. Acabo de publicar una nueva respuesta a continuación. ¡Gracias por ayudarme a empezar! – TypeIA

1

GetFileVersion() (descrito en otras respuestas) devuelve una cadena del formulario "Major.Minor.Rev.Build". Si desea acceder a los elementos individuales para poder formatear la cadena usted mismo (por ejemplo, si solo quiere "Major.Minor" o "Major.Minor.Rev"), puede usar el siguiente enfoque desde 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) 
Cuestiones relacionadas