Installers



  • @Lindon Why no use? Doesn't the wininstaller.iss work? Or do you want to have a custom script?



  • I just tested the script and it generates the wininstaller.iss as expected

    [Setup]
    #define AppName "Michaelas Harp"
    AppName={#AppName}
    AppVersion=1.0.0
    
    DefaultDirName={pf}\Libre Wave\Michaelas Harp
    DefaultGroupName={#AppName}
    Compression=lzma2
    SolidCompression=yes
    OutputDir=.\build
    ArchitecturesInstallIn64BitMode=x64
    OutputBaseFilename={#AppName} Installer 1.0.0
    LicenseFile=EULA.txt
    PrivilegesRequired=admin
    
    SetupLogging=yes
    ChangesAssociations=no
    
    [Types]
    Name: "full"; Description: "Full installation"
    Name: "custom"; Description: "Custom installation"; Flags: iscustom
    
    [Dirs]
    Name: "{app}\"; Permissions: users-modify powerusers-modify admins-modify system-modify
    
    [Components]
    Name: "app"; Description: "{#AppName} Standalone application"; Types: full custom;
    Name: "vst2_32"; Description: "{#AppName} 32-bit VSTi Plugin"; Types: full custom;
    Name: "vst2_64"; Description: "{#AppName} 64-bit VSTi Plugin"; Types: full custom; Check: Is64BitInstallMode;
    ;BEGIN_AAX
    Name: "aax"; Description: "{#AppName} AAX Plugin"; Types: full custom;
    ;END_AAX
    
    [Files]
    
    ; Standalone
    Source: "build\App\{#AppName} x86.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: app; Check: not Is64BitInstallMode
    Source: "build\App\{#AppName} x64.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: app; Check: Is64BitInstallMode
    
    ; VST
    Source: "build\VST\{#AppName} x86.dll"; DestDir: "{code:GetVST2Dir_32}"; Flags: ignoreversion; Components: vst2_32; Check: not Is64BitInstallMode
    
    Source: "build\VST\{#AppName} x86.dll"; DestDir: "{code:GetVST2Dir_32}"; Flags: ignoreversion; Components: vst2_32; Check: Is64BitInstallMode
    Source: "build\VST\{#AppName} x64.dll"; DestDir: "{code:GetVST2Dir_64}"; Flags: ignoreversion; Components: vst2_64; Check: Is64BitInstallMode
    
    ;BEGIN_AAX
    Source: "build\AAX\{#AppName}.aaxplugin\*.*"; DestDir: "{cf}\Avid\Audio\Plug-Ins\{#AppName}.aaxplugin\"; Flags: ignoreversion recursesubdirs; Components: aax
    ;END_AAX
    
    [Icons]
    Name: "{group}\{#AppName}"; Filename: "{app}\{#AppName} x64.exe"; Check: Is64BitInstallMode
    Name: "{group}\{#AppName}"; Filename: "{app}\{#AppName} x86.exe"; Check: not Is64BitInstallMode
    Name: "{group}\Uninstall {#AppName}"; Filename: "{app}\unins000.exe"
    
    [Code]
    var
      OkToCopyLog : Boolean;
      VST2DirPage_32: TInputDirWizardPage;
      VST2DirPage_64: TInputDirWizardPage;
    
    procedure InitializeWizard;
    
    begin
    
      if IsWin64 then begin
        VST2DirPage_64 := CreateInputDirPage(wpSelectDir,
        'Confirm 64-Bit VST2 Plugin Directory', '',
        'Select the folder in which setup should install the 64-bit VST2 Plugin, then click Next.',
        False, '');
        VST2DirPage_64.Add('');
        VST2DirPage_64.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\');
    
        VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
          'Confirm 32-Bit VST2 Plugin Directory', '',
          'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.',
          False, '');
        VST2DirPage_32.Add('');
        VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}\');
      end else begin
        VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
          'Confirm 32-Bit VST2 Plugin Directory', '',
          'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.',
          False, '');
        VST2DirPage_32.Add('');
        VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\');
      end;
    end;
    
    function GetVST2Dir_32(Param: String): String;
    begin
      Result := VST2DirPage_32.Values[0]
    end;
    
    function GetVST2Dir_64(Param: String): String;
    begin
      Result := VST2DirPage_64.Values[0]
    end;
    
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      if CurStep = ssDone then
        OkToCopyLog := True;
    end;
    
    procedure DeinitializeSetup();
    begin
      if OkToCopyLog then
        FileCopy (ExpandConstant ('{log}'), ExpandConstant ('{app}\InstallationLogFile.log'), FALSE);
      RestartReplace (ExpandConstant ('{log}'), '');
    end;
    
    [UninstallDelete]
    Type: files; Name: "{app}\InstallationLogFile.log"
    

    If you want to create the wininstaller.iss without using the full build script you can just run it on the HISE CLI with the command HISE create-win-installer

    0636f052-7138-4eab-975a-f6dc0bee5b9d-image.png



  • @d-healey OK thanks.



  • @d-healey said in Installers:

    define AppName "Michaelas Harp"

    yeah but how does it know whihc of my apps to build?



  • Put the script from Christoph - build.bat in your project's folder. Then run it from the terminal and HISE will compile and generate the .iss file for that project and build the installer in one go.

    You will need to set the project path and HISE path in the build.bat file. The instructions are at the top of the file.



  • @d-healey so now I have to have git installed?

    1. You need to have the following tools installed: git, InnoSetup


  • @Lindon I have git installed anyway but I can't see any mention of git in that script so perhaps it isn't required. It could be that there is some other command that HISE runs that makes use of git to prevent files being overwritten but hard to say without testing it.

    If you just want to generate your own .iss script though you can use the command I posted above and it will create the installer script for the last project loaded in HISE (I think) or you can first load a project into HISE using the CLI with this command:

    HISE set_project_folder "-p:replacewithyourprojectpath"



  • @d-healey nope..

    C:\Users\Lindon\Desktop\HISE-master\projects\standalone\Builds\VisualStudio2017\x64\Release\App>HISE create-win-installer
    'HISE' is not recognized as an internal or external command,
    operable program or batch file.



  • Are you using HISE 2.1? And did you build it from source? It could be that there is an option that needs to be enabled in Projucer when building HISE to enable the CLI



  • You need to add the directory where HISE.exe is located to the environment variable PATH. Welcome to the joyful world of build automation 🙂



  • Oh yeah I forgot to mention that. It's included in the build.bat instructions though

    REM Environment variables, comment for build server usage
    REM set hise_path="D:\Development\HISE modules\projects\standalone\Builds\VisualStudio2017\x64\Release\App\HISE.exe"
    


  • I'm hitting a couple of issues with building via the automated script (building via the export menu works just fine).

    Cleaning Builds but keeping the source code...
    Loading the preset...Invalid script: The script you are trying to load is not a valid HISE script file.
    The callback function onControl( is not defined.
    

    I get this invalid script error but I've checked all scripts and they have onControl, except for some that are includes.

    Then I get this a little later

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets
    \v141\ImportBefore\Intel.Libs.IPP.v141.targets(90,43): error MSB4086: A numeric comparison was attempted on "$(IPPMajor
    Version)" that evaluates to "" instead of a number, in condition "'$(IPPSingleThreaded)'=='0' AND ('$(UseIntelIPP)' ==
    'Sequential' OR '$(UseIntelIPP)' == 'Sequential_Dynamic' OR ('$(UseIntelIPP)' == 'true' AND '%(ClCompile.OpenMPSupport)
    ' != 'true')) AND $(IPPMajorVersion) > 7". [C:\Users\John\Downloads\michaelasHarp-master\Binaries\Builds\VisualStudio20
    17\Michaelas Harp_App.vcxproj]
    


  • @Christoph-Hart yeah, but I'm not really looking for build automation. Like many things in HISE this stuff is great, in that its powerful and useful, but its very very brittle, unless I'm set up EXACTLY like you then it breaks and doesnt work at all.



  • @d-healey
    "Oh yeah I forgot to mention that. It's included in the build.bat instructions though"

    so in the thing I'm supposed to be running are instruction that need to execute BEFORE I run the thing....



  • @Lindon Yup, that's why I always read through scripts to figure out what they do.

    @Christoph-Hart Might be a good idea to include that in the help section 🙂



  • It just occurred to me to run --help on the HISE CLI. Useful reference

    export: builds the project using the default settings
    export_ci: builds the project using customized behaviour for automated builds
     - always use VisualStudio 2017 on Windows
     - don't copy the plugins to the plugin folders
     - use a relative path for the project file
    Arguments:
    FILE      The path to the project file (either .xml or .hip you want to export).
              In CI mode, this will be the relative path from the current project folder
              In standard mode, it must be an absolute path
    -h:{TEXT} sets the HISE path. Use this if you don't have compiler settings set.
    -ipp      enables Intel Performance Primitives for fast convolution.
    -t:{TEXT} sets the project type ('standalone' | 'instrument' | 'effect')
    -p:{TEXT} sets the plugin type ('VST' | 'AU' | 'VST_AU' | 'AAX' | 'ALL')
              (Leave empty for standalone export)
    -a:{TEXT} sets the architecture ('x86', 'x64', 'x86x64').
              (Leave empty on OSX for Universal binary.)
    --test [PLUGIN_FILE]
    Tests the given plugin
    
    set_project_folder -p:PATH
    Changes the current project folder.
    
    set_hise_folder -p:PATH
    Sets the location for the HISE source code folder.
    get_project_folder
    Returns the current project folder.
    
    set_version -v:NEW_VERSION_STRING
    Sets the project version number to the given string
    
    clean [-p:PATH] [-all]
    Cleans the Binaries folder of the given project.
    -p:PATH - the path to the project folder.
    
    create-win-installer
    Creates a template install script for Inno Setup for the project
    


  • Im sorry but can we please get the "build automation/CLI" stuff into another thread, I'd really really like to concentrate on getting a usable installer script here...



  • @Lindon I've just compiled all versions and created the installer using the build script, so it does work with a bit of fiddling. If you want to create your installer independent of the build script then just edit the WinInstaller.iss file to your needs and run it through ISCC.exe via the command line.



  • @d-healey except of course it doesnt work like that. If I copy the file to my project folder and open it in inno then this line errors...

    ; VST
    Source: "build\VST\{#AppName} x86.dll";
    

    ..because, and I dont know about your projects, but my projects have never had this structure... the dll is in
    \Binaries\Compiled\VST{#AppName} x86.dll";

    ..so it means hand-editing it (which I dont mind doing), but again more Brittle behaviors.



  • @Lindon So I will attempt to build a .iss file that works "out of the box" with a "standard HISE project structure" and if/when I get it working I will share it here.


Log in to reply
 

6
Online

474
Users

1.6k
Topics

11.9k
Posts