inno-setupinstallation-path

Refer to a subfolder of an installation path without repeating the name throughout the script


When you give the folder location in the Inno Setup installer it sets it to the constant {app}. If the folder location is given as C:\Program Files\Test1, this will set it to {app} variable. When the user gives this path, is it possible to add to the {app} variable like this C:\Program Files\Test1\MyApp-3.1?

If the user gives the folder location as C:\Program Files\Test1 and clicks the Next button then it should change it to C:\Program Files\Test1\MyApp-3.1. Is this possible?

According to this page {app} is a directory constant.

I have set many files to run in the following sections,

[Icons]
[Run]
[InstallDelete]
[UninstallRun]

For example, {app}\Run.exe. Instead of changing the {app}\Run.exe to {app}\Program\Run.exe, I need to change the {app} to C:\Program Files\Test1\MyApp-3.1.

I have a program which always needs to run from the folder structure MyApp-3.1\Run.exe. If the user select the installation folder as C:\Program Files\Test1 then the folder needs to be set as C:\Program Files\Test1\MyApp-3.1. The easy way is to create the folder MyApp-3.1 with the Run.exe in it and add that folder to the installer. So it will install the MyApp-3.1 folder. The issue is if the folder name is change to MyApp-3.2 then there have to be lot changes in the code.

The question is can you set the {app} variable after clicking the Next button in folder selection dialog?


Solution

  • It looks like you actually need a preprocessor macro:

    #define DestPath "{app}\MyApp-3.1"
    
    [Files]
    Source: "Run.exe"; DestDir: "{#DestPath}"
    Source: "Otherfile"; DestDir: "{#DestPath}"
    
    [Icons]
    Name: "{commondesktop}\My Program"; Filename: "{#DestPath}\Run.exe"; \
        WorkingDir: "{#DestPath}"
    
    [Run]
    Filename: "{#DestPath}\Run.exe"; Parameters: "/install"
    
    [UninstallRun]
    Filename: "{#DestPath}\Run.exe"; Parameters: "/uninstall"
    

    If you need to change the subfolder name, just change the DestPath definition:

    #define DestPath "{app}\MyApp-3.2"