web-dev-qa-db-ja.com

アプリケーションのバージョンに応じてInno Setupインストーラーのバージョンを自動的に設定するにはどうすればよいですか?

Inno Setupを使用して、アプリケーションのインストーラーを生成しています。 Innoによって生成されたsetup.exe(VersionInfoVersion)のバージョン番号を、アプリケーションのバージョン番号と自動的に一致させるにはどうすればよいですか?アプリケーションの新しいバージョンをデプロイするたびに、バージョン番号を手動で更新する必要があります。

今私はこれをやっています:

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

私はこのようなものが欲しい:

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

Inno Setup Preprocessor GetFileVersion関数を次のように使用できます

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

コマンドライン引数 を使用してそれを行う別の方法:

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

純粋なwebinstallerを使用している場合、バージョン番号を取得するapplication.exeがないため、受け入れられたソリューションは機能しません。

私はNantとバージョン番号プロパティを含むbuild.xmlファイルを使用しています。これは、innosetupインストーラーを再構築する前に手動でバンプします。

私の* .issファイルには特別なトークン@ APPVERSION @が含まれており、ビルドプロセス中にバージョン番号に置き換えられます。これは、フィルターチェーンが適用されたコピー操作によって行われます。以下を参照してください。

InnoSetupスクリプト(* .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>
5
Jens A. Koch

これを機能させるのにいくつかの問題があったので、私の解決策を提供するだけです。

app.iss:

[Setup]
#include "Config.txt"

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


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

Config.txt:

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

かなり長い間他の方法を試しましたが、私にとってそれが機能する方法は、相対パスを使用することでした(私はフォルダーに.issファイルを持ち、2レベル上のEXEファイルを持っています)。

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