Как автоматически установить версию установщика 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}
Ответы
Ответ 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")