Номер версии автоматической сборки с WiX, Inno Setup и VS2008 - PullRequest
16 голосов
/ 11 декабря 2008

В основном мне нужен автоматический способ обновить номер версии продукта в WiX (3.0 с Votive и т. Д.), А затем получить этот номер версии в «загрузчик» Inno Setup

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

Ответы [ 5 ]

26 голосов
/ 11 декабря 2008

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

#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 за обновление)

8 голосов
/ 11 декабря 2008

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

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

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

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

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

1 голос
/ 11 декабря 2008

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

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

VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345

Основной скрипт Inno Setup будет включать этот файл, добавив в конец раздела [Setup] следующее:

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

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

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

cscript version.js //NoLogo

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

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

1 голос
/ 11 декабря 2008

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

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

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

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я запускаю скрипт, который генерирует файлы, содержащие номер сборки на этапе предварительной сборки моих различных проектов VS.

0 голосов
/ 11 декабря 2008

Я нашел это для раздела настройки inno, который выглядит так, как будто он будет работать:

http://agiletracksoftware.com/blog.html?id=4

...