How do I automatically set the version of my Inno Setup installer according to my application version?

前端 未结 6 1296
清歌不尽
清歌不尽 2020-12-02 08:43

I am using Inno Setup to generate the installer of my application. How can set the version number of the setup.exe (VersionInfoVersion) generated by Inno to mat

相关标签:
6条回答
  • 2020-12-02 09:12

    After quite some time trying other methods, the way it worked for me was to use a relative path (I have the .iss file in a folder and the EXE file two levels above).

    ; Extract File Version from EXE
    #define MyAppVersion GetFileVersion("..\..\Release\CSClave.exe")
    
    0 讨论(0)
  • 2020-12-02 09:12

    As others have mentioned, the GetFileVersion or GetStringFileInfo preprocessor functions can be used for that.

    Some important info, improvements and helpful additions:

    • You can either use an absolute path to the exe, or a path relative to the .iss file
    • You can include existing defines in your statement by just writing their name, and concatenate defines with the + operator:
      #define MyAppPath "..\Win32\Release\" + MyAppExeName
    • If you want you can easily remove parts of the version number from the right by using the function RemoveFileExt, e. g. convert 3.1.2.0 to 3.1.2:
      #define MyAppVersion RemoveFileExt(GetFileVersion(MyAppPath))
    • You can use the defines MyAppExeName and MyAppPath in the subsequent options like Messages, Files or Icons

    Working example:

    #define MyAppName "Application Name"
    #define MyAppExeName "Application.exe"        
    #define MyAppPath "..\Win32\Release\" + MyAppExeName
    #define MyAppVersion RemoveFileExt(GetFileVersion(MyAppPath))
    
    [Setup]
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    AppVerName={#MyAppName} {#MyAppVersion}
    VersionInfoVersion={#MyAppVersion}
    OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Windows
    
    ...
    
    [Messages]
    SetupWindowTitle=Setup - {#MyAppName} {#MyAppVersion}
    
    ...
    
    [Files]
    Source: {#MyAppPath}; DestDir: "{app}"; Flags: ignoreversion; Tasks: desktopicon
    
    ...
    
    [Icons]
    Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
    
    0 讨论(0)
  • 2020-12-02 09:17

    Another way to do it by using a command line argument :

    [Setup]           
    AppVersion={#MyAppVersion}
    

    and you just call your script as follow from a cmd :

    cd C:\Program Files (x86)\Inno Setup 5
    
    iscc /dMyAppVersion="10.0.0.1" "C:\MyPath\MyScript.iss"
    

    It emulate #define MyAppVersion="10.0.0.1" in the iss script.


    If you are using CakeBuild, you can pass this argument as

     string CurrentVersion  = "10.0.0.1";
     InnoSetupSettings settings = new InnoSetupSettings();
     settings.Defines=   new Dictionary<string, string>
                {
                { "MyAppVersion", CurrentVersion },
                };
       InnoSetup("C:\MyPath\MyScript.iss", settings);
    
    0 讨论(0)
  • 2020-12-02 09:23

    I had some problems with getting this to work, so just contributing my solution.

    app.iss:

    [Setup]
    #include "Config.txt"
    
    #define AppVersion GetFileVersion("Input\" + AppExec)
    
    
    AppName={#AppName}
    AppVersion={#AppVersion}
    

    Config.txt:

    #define AppName "App"
    #define AppExec "App.exe"
    
    0 讨论(0)
  • 2020-12-02 09:29

    In case you have a pure webinstaller, the accepted solution won't work, because you simply won't have an application.exe to get the version number from.

    I'm using Nant and a build.xml file with version number properties, which i manually bump, before i'm rebuilding the innosetup installers.

    My *.iss files contain a special token @APPVERSION@, which is replaced with the version number during the build process. This is done via a copy operation with an applied filterchain, see below.

    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>
    
    0 讨论(0)
  • 2020-12-02 09:30

    You can use the Inno Setup Preprocessor GetFileVersion function like this

    #define ApplicationName 'Application Name'
    #define ApplicationVersion GetFileVersion('Application.exe')
    [Setup]
    AppName={#ApplicationName}
    AppVerName={#ApplicationName} {#ApplicationVersion}
    VersionInfoVersion={#ApplicationVersion}
    
    0 讨论(0)
提交回复
热议问题