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

Как автоматически установить версию установщика Inno Setup в соответствии с моей версией приложения?

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

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

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

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

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

Ответ 1

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

#define ApplicationName 'Application Name'
#define ApplicationVersion GetFileVersion('Application.exe')
[Setup]
AppName={#ApplicationName}
AppVerName={#ApplicationName} {#ApplicationVersion}
VersionInfoVersion={#ApplicationVersion}

Ответ 2

Еще один способ сделать это с помощью аргумента командной строки:

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

Ответ 3

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

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

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

InnoSetup Script (*.iss)

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

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>

Ответ 4

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

app.iss:

[Setup]
#include "Config.txt"

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


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

Config.txt:

#define AppName "App"
#define AppExec "App.exe"

Ответ 5

Спустя некоторое время, попробовав другие методы, у меня получилось использовать относительный путь (у меня есть файл .iss в папке и файл EXE двумя уровнями выше).

; Extract File Version from EXE
#define MyAppVersion GetFileVersion("..\..\Release\CSClave.exe")