Подтвердить что ты не робот

Номер версии Automated-build с WiX, Inno Setup и VS2008

В принципе, мне нужен автоматический способ обновления номера версии продукта в WiX (3.0 с помощью Votive и т.д.), а затем получить этот номер версии в установщике Inno Setup "bootstrapper"

У меня в значительной степени процесс в основном автоматизирован, однако номера версий по-прежнему необходимо обновлять вручную, что, очевидно, не идеально, но я не мог найти, как передавать значения в Inno Setup во время компиляции (и как ссылаться их), а в проекте WiX мне нужно знать, как ссылаться на номер версии другого проекта в том же решении в Visual Studio 2008

4b9b3361

Ответ 1

Не нужно ничего пропускать! Вы можете просто позволить препроцессору InnoSetup прочитать информацию о версии прямо из ресурса бинарной версии, например:

#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

До версии 5.4.1 (2011-02-09) ISPP не был включен в пакет InnoSetup по умолчанию. Вам пришлось загрузить пакет быстрого запуска InnoSetup: http://www.jrsoftware.org/isdl.php#qsp (спасибо @Gwyn за обновление)

Ответ 2

Вы можете получить ProductVersion для WiX из версии файла в вашем пакете. Синтаксис выглядит примерно так:

<Product Version="$(var.FileVersion.FileId)">

Или вы можете предоставить его в командной строке для свечи с помощью переключателя "-dVersionFromCommandLine = 1.0.0.0" с синтаксисом, например:

<Product Version="$(var.VersionFromCommandLine)">

Либо работает в последних версиях WiX v3. Только последний работает на WiX v2.

Ответ 3

Как я это делаю с WSF script (я использую JavaScript, но вы можете использовать VBScript или даже SH script с помощью Cygwin), который создает заголовочный файл, содержащий определения для номеров версий. Вы можете использовать оператор Wix <include> для перетаскивания номера версии.

Для Inno Setup я создаю файл .iss, который содержит номер версии, который # включен в main iss script.

Я нахожусь дома, но могу отправить код образца завтра, если хотите.

EDIT: Я забыл упомянуть, что я запускаю script, который генерирует файлы, содержащие номер сборки, на этапе предварительной сборки моих различных проектов VS.

Ответ 4

Пример кода, как и было обещано. Этого должно быть достаточно, чтобы вы начали.

Следующий JavaScript может использоваться для создания файла InnoSetup iss, содержащего номер версии. Фактический файл будет выглядеть так:

VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345

В основной программе Inno Setup script будет указан этот файл, добавив следующее в конец раздела [Настройка]:

[Setup]
AppId={{...}}
...

#include "version.iss"

Вот JavaScript (это будет сохранено как отдельный файл - version.js, например):

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

Вы можете настроить этот script, чтобы создать файл version.iss в другой папке.

Наконец, вам нужно выполнить JavaScript - лучшее место будет в представлении Pre-Build вашего проекта Visual Studio. Добавьте следующее:

cscript version.js //NoLogo

Вам нужно будет изменить это, чтобы также создать совместимый с Wix файл. Я использовал это, но бросил Wix в пользу Inno Setup, поэтому у меня нет этого кода. Для Wix script существует механизм для того, чтобы указать вам в правильном направлении - концепция одинаков - создайте текстовый файл, который определяет номер версии, а затем включите его.

Надеюсь, что это поможет.