visual studio 2008 - prime - Número de versión de compilación automática con WiX, Inno Setup y VS2008
wix instalador (5)
Básicamente, lo que necesito es una forma automatizada de actualizar el número de versión del producto en WiX (3.0 con Votive, etc.) y luego obtener ese número de versión en un "arranque" Inno Setup
Prácticamente tengo el proceso en su mayoría automatizado, sin embargo, los números de versión todavía deben actualizarse manualmente, lo que obviamente no es ideal, pero no pude encontrar cómo pasar los valores a Inno Setup en tiempo de compilación (y cómo hacer referencia a ellos), y en el proyecto de WiX necesito saber cómo hacer referencia al número de versión de un proyecto diferente en la misma solución en Visual Studio 2008
Encontré esto para la sección de configuración de inno que parece funcionar:
La forma en que lo hago es con un script WSF (uso JavaScript pero puede usar VBScript o incluso un script SH usando Cygwin) que crea un archivo de encabezado que contiene definiciones para los números de versión. Puede usar la instrucción Wix <include>
para arrastrar el número de versión en.
Para Inno Setup, creo un archivo .iss que contiene el número de versión, que es #incluido en el script iss principal.
Estoy en casa pero puedo publicar un código de muestra mañana si lo desea.
EDITAR: Olvidé mencionar que ejecuto el script que genera los archivos que contienen el número de compilación durante la etapa de preconstrucción de mis diversos proyectos de VS.
Algunos ejemplos de código como se prometió. Esto debería ser suficiente para comenzar.
El siguiente JavaScript se puede usar para crear un archivo de InnoSetup iss que contenga el número de versión. El archivo real se verá así:
VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345
La secuencia de comandos principal de Inno Setup incluirá este archivo agregando lo siguiente al final de la sección [Configuración] :
[Setup]
AppId={{...}}
...
#include "version.iss"
Aquí está el JavaScript (esto se guardará como un archivo separado - version.js, por ejemplo):
createInnoSetupIncludeFile("My App", 1, 2, 3, 12345, "version.iss");
function createInnoSetupIncludeFile(appName, verMajor, verMinor, verSubMinor, buildNumber, headerFileName)
{
var versionString = verMajor + "." + verMinor + "." + verSubMinor + "." + buildNumber;
var fileSystemObject = WScript.CreateObject("Scripting.FileSystemObject");
var fileObject = fileSystemObject.CreateTextFile(headerFileName, true);
fileObject.WriteLine("VersionInfoVersion=" + versionString);
fileObject.WriteLine("AppVerName=" + appName + " v" + versionString);
fileObject.Close();
fileObject = null;
fileSystemObject = null;
}
Podría modificar esta secuencia de comandos para crear el archivo version.iss en una carpeta diferente.
Finalmente, debe ejecutar JavaScript: el mejor lugar sería en el evento de preconstrucción de su proyecto de Visual Studio. Agregue lo siguiente:
cscript version.js //NoLogo
Debería cambiar esto para también crear un archivo de inclusión compatible con Wix. Solía hacer esto, pero abandoné Wix a favor de Inno Setup, así que no tengo este código a mano. Sin embargo, hay un meca- nismo para un guión Wix, por lo que debe apuntarlo en la dirección correcta (el concepto es el mismo), genere un archivo de texto que defina el número de versión y luego inclúyalo.
Espero que esto ayude.
Puede obtener ProductVersion para WiX a partir de una versión de archivo en su paquete. La sintaxis es algo así como:
<Product Version="$(var.FileVersion.FileId)">
O puede proporcionarlo en la línea de comando para usar el modificador "-dVersionFromCommandLine = 1.0.0.0" con sintaxis como:
<Product Version="$(var.VersionFromCommandLine)">
Cualquiera de los dos funciona en las últimas versiones de WiX v3. Solo este último funciona en WiX v2.
¡No es necesario pasar nada! Simplemente puede dejar que el preprocesador InnoSetup lea la información de la versión directamente desde el recurso de versión del binario, por ejemplo:
#define AppName "My App"
#define SrcApp "MyApp.exe"
#define FileVerStr GetFileVersion(SrcApp)
#define StripBuild(str VerStr) Copy(VerStr, 1, RPos(".", VerStr)-1)
#define AppVerStr StripBuild(FileVerStr)
[Setup]
AppName={#AppName}
AppVersion={#AppVerStr}
AppVerName={#AppName} {#AppVerStr}
UninstallDisplayName={#AppName} {#AppVerStr}
VersionInfoVersion={#FileVerStr}
VersionInfoTextVersion={#AppVerStr}
OutputBaseFilename=MyApp-{#FileVerStr}-setup
Antes de la versión 5.4.1 (2011-02-09), ISPP no estaba incluido en el paquete InnoSetup predeterminado. Debes descargar el paquete de inicio rápido de InnoSetup: http://www.jrsoftware.org/isdl.php#qsp (gracias @Gwyn, para la actualización)