Номер версии автоматической сборки с WiX, Inno Setup и VS2008

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

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

5 ОТВЕТОВ
РЕШЕНИЕ

Не нужно ничего пропускать! Вы можете просто позволить препроцессору 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, за обновление)

26
7.06.2011 07:37:45
Вот Это Да! Это блестяще! +1. Раздражает, что ISPP не является частью пакета по умолчанию.
Rob 11.12.2008 09:43:15
+1 Вы можете извлечь все значения versioninfo из вашего exe. Я использовал Inno (и ISTool) уже несколько лет для всех своих продуктов, и я думаю, что это довольно ... красиво.
Spike0xff 22.05.2010 20:26:27
Можно ли сказать, что AppVerName = 0,1 (новая строка) OutputBaseFilename = {AppVerName}?
rogerdpack 17.08.2011 22:54:41

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

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

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

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

1
10.12.2008 22:23:15

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

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

0
10.12.2008 23:03:14
Да, но зачем проходить через все эти неприятности, когда вы можете просто заставить компилятор Inno получать числа из информационного ресурса о версии исходного двоичного файла (см. Мой ответ)? Избегайте двойного ведения (например, вручную помещая версию как в ресурс, так и в текстовый файл), где это возможно.
Oliver Giesen 12.12.2008 08:42:43

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

Следующий 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.12.2008 08:06:17
Спасибо, не уверен, пойду ли я с твоим или Оливером, но +1 к вам обоим :)
Davy8 11.12.2008 16:11:37

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

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

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

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

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

8
11.12.2008 18:51:11
Роб ответил на это в stackoverflow.com/questions/626033/… более правильно, я думаю. Вы должны использовать (bind.FileVersion.MyFileId)!
vasquez 30.03.2011 15:22:46