Номер версии Automated-build с WiX, Inno Setup и VS2008
В принципе, мне нужен автоматический способ обновления номера версии продукта в WiX (3.0 с помощью Votive и т.д.), а затем получить этот номер версии в установщике Inno Setup "bootstrapper"
У меня в значительной степени процесс в основном автоматизирован, однако номера версий по-прежнему необходимо обновлять вручную, что, очевидно, не идеально, но я не мог найти, как передавать значения в Inno Setup во время компиляции (и как ссылаться их), а в проекте WiX мне нужно знать, как ссылаться на номер версии другого проекта в том же решении в Visual Studio 2008
Ответы
Ответ 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 существует механизм для того, чтобы указать вам в правильном направлении - концепция одинаков - создайте текстовый файл, который определяет номер версии, а затем включите его.
Надеюсь, что это поможет.
Ответ 5
Я нашел это для раздела настройки inno, который выглядит так, как будто он работает:
http://agiletracksoftware.com/blog.html?id=4