Puede ser una forma muy simple de hacer esto, pero yo no sé lo que es. Cuando Primero comencé a usar NSIS, desarrollé esta solución para satisfacer mis necesidades y no volví a visitar el problema para ver si hay algo más elegante.
Quería que mis instaladores tuvieran el mismo número de versión, descripción e información de derechos de autor que mi ejecutable principal. Así que escribí una aplicación corta de C# llamada GetAssemblyInfoForNSIS que extrae esa información del archivo de un ejecutable y la escribe en un archivo .nsh que incluyen mis instaladores.
Aquí está la aplicación de C#:
using System;
using System.Collections.Generic;
using System.Text;
namespace GetAssemblyInfoForNSIS {
class Program {
/// <summary>
/// This program is used at compile-time by the NSIS Install Scripts.
/// It copies the file properties of an assembly and writes that info a
/// header file that the scripts use to make the installer match the program
/// </summary>
static void Main(string[] args) {
try {
String inputFile = args[0];
String outputFile = args[1];
System.Diagnostics.FileVersionInfo fileInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(inputFile);
using (System.IO.TextWriter writer = new System.IO.StreamWriter(outputFile, false, Encoding.Default)) {
writer.WriteLine("!define VERSION \"" + fileInfo.ProductVersion + "\"");
writer.WriteLine("!define DESCRIPTION \"" + fileInfo.FileDescription + "\"");
writer.WriteLine("!define COPYRIGHT \"" + fileInfo.LegalCopyright + "\"");
writer.Close();
}
} catch (Exception e) {
Console.WriteLine(e.Message + "\n\n");
Console.WriteLine("Usage: GetAssemblyInfoForNSIS.exe MyApp.exe MyAppVersionInfo.nsh\n");
}
}
}
}
tanto, si utiliza esa aplicación, así:
GetAssemblyInfoForNSIS.exe MyApp.exe MyAppVersionInfo.nsh
que se obtendría una archivo denominado MyAppVersionInfo.nsh que se parece a esto (suponiendo que esta información se encuentre en el archivo ejecutable):
!define VERSION "2.0"
!define DESCRIPTION "My awesome application"
!define COPYRIGHT "Copyright © Me 2010"
En la parte superior de mi script NSIS, hago algo como esto:
!define GetAssemblyInfoForNSIS "C:\MyPath\GetAssemblyInfoForNSIS.exe"
!define PrimaryAssembly "C:\MyPath\MyApp.exe"
!define VersionHeader "C:\MyPath\MyAppVersionInfo.nsh"
!system '"${GetAssemblyInfoForNSIS}" "${PrimaryAssembly}" "${VersionHeader}"'
!include /NONFATAL "${VersionHeader}"
!ifdef VERSION
Name "My App ${VERSION}"
!else
Name "My App"
!endif
!ifdef DESCRIPTION
VIAddVersionKey FileDescription "${DESCRIPTION}"
!endif
!ifdef COPYRIGHT
VIAddVersionKey LegalCopyright "${COPYRIGHT}"
!endif
El primer 3 define el conjunto de los nombres de archivo a utilizar en el !system llamada a GetAssemblyInfoForNSIS.exe. Esta llamada al sistema se lleva a cabo durante la compilación de su instalador y genera el archivo .nsh justo antes de incluirlo. Uso el modificador/NONFATAL para que mi instalador no falle por completo si se produce un error al generar el archivo de inclusión.
ahora que es lo que llamo una solución! Gracias:) – codeulike
Las personas como tú son la razón por la que SO funciona :) Gracias – darkpbj