Может быть очень простой способ сделать это, но я не знаю, что это такое.Когда я впервые начал использовать NSIS, я разработал этот обходной путь, чтобы удовлетворить свои потребности, и не пересматривал проблему с тех пор, чтобы посмотреть, есть ли что-нибудь более элегантное.
Я хотел, чтобы мои установщики имели тот же номер версии, описание,и информация об авторских правах как мой основной исполняемый файл.Поэтому я написал короткое приложение на C # под названием GetAssemblyInfoForNSIS, которое извлекает информацию о файле из исполняемого файла и записывает ее в файл .nsh, который входит в мои установщики.
Вот приложение 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");
}
}
}
}
Таким образом, если вы используете это приложение следующим образом:
GetAssemblyInfoForNSIS.exe MyApp.exe MyAppVersionInfo.nsh
Вы получите файл с именем MyAppVersionInfo.nsh, который выглядит примерно так:это (при условии, что эта информация находится в вашем исполняемом файле):
!define VERSION "2.0"
!define DESCRIPTION "My awesome application"
!define COPYRIGHT "Copyright © Me 2010"
В верхней части моего сценария NSIS я делаю что-то вроде этого:
!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
Первые 3 определяют установкуимена файлов для использования в ! system вызове GetAssemblyInfoForNSIS.exe.Этот системный вызов происходит во время компиляции вашего установщика и генерирует файл .nsh непосредственно перед его включением.Я использую ключ / NONFATAL, чтобы мой установщик не завершился сбоем, если при создании файла включения возникает ошибка.