; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "ODM" #define VerFile FileOpen("VERSION") #define MyAppVersion FileRead(VerFile) #expr FileClose(VerFile) #undef VerFile #define MyAppPublisher "OpenDroneMap" #define MyAppURL "https://opendronemap.org" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{443998BA-9F8F-4A69-9A96-0D8FBC8C6393} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName=C:\ODM DefaultGroupName={#MyAppName} AllowNoIcons=yes LicenseFile=LICENSE OutputDir=dist OutputBaseFilename=ODM_Setup_{#MyAppVersion} Compression=lzma SolidCompression=yes ArchitecturesAllowed=x64 ArchitecturesInstallIn64BitMode=x64 #ifndef SKIP_SIGN SignTool=signtool #endif PrivilegesRequired=lowest PrivilegesRequiredOverridesAllowed=commandline UsePreviousAppDir=no ;SetupIconFile=setup.ico [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Files] Source: "contrib\*"; DestDir: "{app}\contrib"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "licenses\*"; DestDir: "{app}\licenses"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "opendm\*"; DestDir: "{app}\opendm"; Excludes: "__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "stages\*"; DestDir: "{app}\stages"; Excludes: "__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "SuperBuild\install\bin\*"; DestDir: "{app}\SuperBuild\install\bin"; Excludes: "__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "SuperBuild\install\lib\python3.8\*"; DestDir: "{app}\SuperBuild\install\lib\python3.8"; Excludes: "__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "venv\*"; DestDir: "{app}\venv"; Excludes: "__pycache__,pyvenv.cfg"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "python38\*"; DestDir: "{app}\venv\Scripts"; Excludes: "__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "console.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "VERSION"; DestDir: "{app}"; Flags: ignoreversion Source: "LICENSE"; DestDir: "{app}"; Flags: ignoreversion Source: "run.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "run.py"; DestDir: "{app}"; Flags: ignoreversion Source: "settings.yaml"; DestDir: "{app}"; Flags: ignoreversion Source: "win32env.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "winrun.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "SuperBuild\download\vc_redist.x64.exe"; DestDir: {tmp}; Flags: dontcopy Source: "winpostinstall.bat"; DestDir: "{app}"; Flags: ignoreversion [Dirs] Name: "{commonappdata}\ODM"; Permissions: users-modify [Icons] Name: {group}\ODM Console; Filename: "{app}\console.bat"; WorkingDir: "{app}" Name: "{userdesktop}\ODM Console"; Filename: "{app}\console.bat"; WorkingDir: "{app}"; Tasks: desktopicon [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Run] Filename: "{tmp}\vc_redist.x64.exe"; StatusMsg: "Installing Visual C++ Redistributable Packages for Visual Studio 2019"; Parameters: "/quiet"; Check: VC2019RedistNeedsInstall ; Flags: waituntilterminated Filename: "{app}\winpostinstall.bat"; StatusMsg: "Post Install"; Flags: waituntilterminated runhidden Filename: "{app}\console.bat"; Description: {cm:LaunchProgram,ODM Console}; Flags: nowait postinstall skipifsilent [Code] function VC2019RedistNeedsInstall: Boolean; var Version: String; begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Version', Version) then begin // Is the installed version at least 14.14 ? Log('VC Redist Version check : found ' + Version); Result := (CompareStr(Version, 'v14.14.26429.03')<0); end else begin // Not even an old version installed Result := True; end; if (Result) then begin ExtractTemporaryFile('vc_redist.x64.exe'); end; end; function GetUninstallString(): String; var sUnInstPath: String; sUnInstallString: String; begin sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1'); sUnInstallString := ''; if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); Result := sUnInstallString; end; function IsUpgrade(): Boolean; begin Result := (GetUninstallString() <> ''); end; function UnInstallOldVersion(): Integer; var sUnInstallString: String; iResultCode: Integer; begin { Return Values: } { 1 - uninstall string is empty } { 2 - error executing the UnInstallString } { 3 - successfully executed the UnInstallString } { default return value } Result := 0; { get the uninstall string of the old app } sUnInstallString := GetUninstallString(); if sUnInstallString <> '' then begin sUnInstallString := RemoveQuotes(sUnInstallString); if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then Result := 3 else Result := 2; end else Result := 1; end; procedure CurStepChanged(CurStep: TSetupStep); begin if (CurStep=ssInstall) then begin if (IsUpgrade()) then begin UnInstallOldVersion(); end; end; end; [UninstallDelete] Type: filesandordirs; Name: "{app}\SuperBuild" Type: filesandordirs; Name: "{app}\contrib" Type: filesandordirs; Name: "{app}\licenses" Type: filesandordirs; Name: "{app}\opendm" Type: filesandordirs; Name: "{app}\stages" Type: filesandordirs; Name: "{app}\venv"