¿Es posible obtener Inno Setup para leer la versión del archivo ejecutable principal y establecer el nombre de la configuración creada en algo como "myapp_setup_1_0_3708_19805.exe"?¿Puede el nombre de archivo de instalación derivarse del número de versión del archivo ejecutable?
¿Puede el nombre de archivo de instalación derivarse del número de versión del archivo ejecutable?
Respuesta
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.
; 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])
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)
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
@TypeIA ¿Tiene una idea de cómo manejar ese caso? – Thunderforge
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
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)
- 1. Obtener la versión del archivo ejecutable no ejecutable
- 2. Comparación del número de versión dentro del archivo MAKE
- 3. Eliminando el número de versión del nombre de archivo con Maven
- 4. Instale un archivo independientemente del número de versión con WiX
- 5. Obtener el nombre del archivo ejecutable desde el método main()
- 6. Nombre del paquete, nombre del archivo ejecutable, nombre del producto ... ¿algo más?
- 7. Versión del archivo vs. Versión del producto
- 8. Número de versión .NET (versión del instalador)
- 9. ¿Es posible obtener un número de versión del archivo XAP
- 10. Instalación del archivo zip noinstall de mysql
- 11. ¿Cómo extraer el nombre del archivo del nombre de la ruta del archivo?
- 12. TeamCity para leer y actualizar el número de versión del archivo de versión
- 13. Obtener el ícono del archivo APK, versión, nombre
- 14. QT: Cambia el nombre del ejecutable incorporado
- 15. Obtener el nombre del archivo MAKE del archivo MAKE
- 16. Argumento de la línea de comandos de Winform que devuelve el nombre del archivo ejecutable
- 17. Recuperando la ruta de instalación del archivo desde el registro
- 18. Rpmbuild - configuración del nombre del archivo .rpm creado
- 19. Extraer solo el nombre de archivo Del nombre de FileItem
- 20. Cómo almacenar datos dentro del archivo ejecutable
- 21. Nombre de la aplicación de guerra separador del nombre del archivo de guerra
- 22. ¿Cómo puedo seleccionar el nombre de archivo con el número de versión más alto?
- 23. ¿Cómo cambiar el nombre del archivo de configuración en ClickOnce?
- 24. Obtener el nombre del producto del archivo msi en C#
- 25. ¿Cómo ejecutar ejecutable al final del proyecto de instalación?
- 26. Subclipse no puede cambiar el nombre del archivo (OS X)
- 27. Forzar instalador para actualizar un archivo en el GAC independientemente del número de versión
- 28. ¿Cómo puedo encontrar el nombre de archivo ejecutable actual?
- 29. Cómo obtener el nombre del ejecutable de una ventana
- 30. error de hormiga No se puede cambiar el nombre del archivo anterior al archivo temporal
preciosa! Funcionó bien, solo necesitaba el MainBinaryName entre comillas :) (Edité tu respuesta) –
+1, no sabía que el preprocesador podría usarse para eso. Eliminaré mi respuesta – mghie