Как автоматически установить версию моего установщика Inno Setup в соответствии с версией моего приложения? - PullRequest
56 голосов
/ 28 июня 2011

Я использую Inno Setup для генерации установщика моего приложения. Как установить номер версии setup.exe (VersionInfoVersion), сгенерированного Inno, таким образом, чтобы он автоматически совпадал с номером версии моего приложения? Теперь каждый раз, когда я развертываю новую версию своего приложения, мне нужно обновлять номер версии вручную.

Сейчас я делаю это:

[Setup]
VersionInfoVersion=1.2.2.0 //writing the value manually

Я хочу что-то вроде этого:

[Setup]
VersionInfoVersion={Get the version of my app}

Ответы [ 4 ]

83 голосов
/ 28 июня 2011

Вы можете использовать функцию препроцессора Inno Setup GetFileVersion следующим образом

#define ApplicationName 'Application Name'
#define ApplicationVersion GetFileVersion('Application.exe')
[Setup]
AppName={#ApplicationName}
AppVerName={#ApplicationName} {#ApplicationVersion}
VersionInfoVersion={#ApplicationVersion}
7 голосов
/ 27 июля 2017

Другой способ сделать это, используя аргумент командной строки :

[Setup]           
AppVersion={#MyAppVersion}

и вы просто вызываете свой скрипт, как следует из cmd:

cd C:\Program Files (x86)\Inno Setup 5

iscc /dMyAppVersion="10.0.0.1" "C:\MyPath\MyScript.iss"

Он эмулирует #define MyAppVersion="10.0.0.1" в скрипте iss.


Если вы используете CakeBuild , вы можете передать этот аргумент как

 string CurrentVersion  = "10.0.0.1";
 InnoSetupSettings settings = new InnoSetupSettings();
 settings.Defines=   new Dictionary<string, string>
            {
            { "MyAppVersion", CurrentVersion },
            };
   InnoSetup("C:\MyPath\MyScript.iss", settings);
5 голосов
/ 28 марта 2014

Если у вас чистый веб-установщик, то принятое решение не будет работать, потому что у вас просто не будет application.exe для получения номера версии.

Я использую Nant и build.xml файл со свойствами номера версии, которые я вручную поднимаю, прежде чем перестраивать установщики innosetup.

Мои * .iss файлы содержат специальный токен @ APPVERSION @, которыйзаменяется номером версии в процессе сборки.Это делается с помощью операции копирования с примененной цепочкой фильтров, см. Ниже.

InnoSetup Script (* .iss)

// the -APPVERSION- token is replaced during the nant build process
#define AppVersion "@APPVERSION@"

nant build.xml:

<!-- Version -->
<property name="product.Name"           value="My Software"/>
<property name="version.Major"          value="1"/>
<property name="version.Minor"          value="2"/>
<property name="version.BuildNumber"    value="3"/>
<property name="product.Version" 
          value="${version.Major}.${version.Minor}.${version.BuildNumber}"/>

<!-- build task -->
<target name="bump-version"
        description="Inserts the current version number into the InnoScript.">
        <copy todir="${dir.Build}" overwrite="true">
            <fileset basedir="${dir.Base}/innosetup/">
                <include name="product-webinstaller-w32.iss"/>
                <include name="product-webinstaller-w64.iss"/>
            </fileset>
            <filterchain>
                <replacetokens>
                    <token key="APPVERSION" value="${product.Version}"/>
                </replacetokens>
            </filterchain>
        </copy>
</target>
2 голосов
/ 27 мая 2017

У меня были некоторые проблемы с тем, чтобы заставить это работать, так что просто помог мне.

app.iss:

[Setup]
#include "Config.txt"

#define AppVersion GetFileVersion("Input\" + AppExec)


AppName={#AppName}
AppVersion={#AppVersion}

Config.txt:

#define AppName "App"
#define AppExec "App.exe"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...