diff --git a/Build/Setup/dotnetfx35setup.exe b/Build/Setup/dotnetfx35setup.exe deleted file mode 100755 index 7fd35dc0..00000000 Binary files a/Build/Setup/dotnetfx35setup.exe and /dev/null differ diff --git a/Build/Setup/vcredist_x86.exe b/Build/Setup/vcredist_x86.exe deleted file mode 100755 index 378e7f03..00000000 Binary files a/Build/Setup/vcredist_x86.exe and /dev/null differ diff --git a/Setup/CodeDependencies.iss b/Setup/CodeDependencies.iss new file mode 100644 index 00000000..f976d719 --- /dev/null +++ b/Setup/CodeDependencies.iss @@ -0,0 +1,790 @@ +; -- CodeDependencies.iss -- +; +; This script shows how to download and install any dependency such as .NET, +; Visual C++ or SQL Server during your application's installation process. +; +; contribute: https://github.com/DomGries/InnoDependencyInstaller + + +; ----------- +; SHARED CODE +; ----------- +[Code] +// types and variables +type + TDependency_Entry = record + Filename: String; + Parameters: String; + Title: String; + URL: String; + Checksum: String; + ForceSuccess: Boolean; + RestartAfter: Boolean; + end; + +var + Dependency_Memo: String; + Dependency_List: array of TDependency_Entry; + Dependency_NeedRestart, Dependency_ForceX86: Boolean; + Dependency_DownloadPage: TDownloadWizardPage; + +procedure Dependency_Add(const Filename, Parameters, Title, URL, Checksum: String; const ForceSuccess, RestartAfter: Boolean); +var + Dependency: TDependency_Entry; + DependencyCount: Integer; +begin + Dependency_Memo := Dependency_Memo + #13#10 + '%1' + Title; + + Dependency.Filename := Filename; + Dependency.Parameters := Parameters; + Dependency.Title := Title; + + if FileExists(ExpandConstant('{tmp}{\}') + Filename) then begin + Dependency.URL := ''; + end else begin + Dependency.URL := URL; + end; + + Dependency.Checksum := Checksum; + Dependency.ForceSuccess := ForceSuccess; + Dependency.RestartAfter := RestartAfter; + + DependencyCount := GetArrayLength(Dependency_List); + SetArrayLength(Dependency_List, DependencyCount + 1); + Dependency_List[DependencyCount] := Dependency; +end; + + +procedure Dependency_Internal1; +begin + Dependency_DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil); +end; + + +function Dependency_Internal2(var NeedsRestart: Boolean): String; +var + DependencyCount, DependencyIndex, ResultCode: Integer; + Retry: Boolean; + TempValue: String; +begin + DependencyCount := GetArrayLength(Dependency_List); + + if DependencyCount > 0 then begin + Dependency_DownloadPage.Show; + + for DependencyIndex := 0 to DependencyCount - 1 do begin + if Dependency_List[DependencyIndex].URL <> '' then begin + Dependency_DownloadPage.Clear; + Dependency_DownloadPage.Add(Dependency_List[DependencyIndex].URL, Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Checksum); + + Retry := True; + while Retry do begin + Retry := False; + + try + Dependency_DownloadPage.Download; + except + if Dependency_DownloadPage.AbortedByUser then begin + Result := Dependency_List[DependencyIndex].Title; + DependencyIndex := DependencyCount; + end else begin + case SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of + IDABORT: begin + Result := Dependency_List[DependencyIndex].Title; + DependencyIndex := DependencyCount; + end; + IDRETRY: begin + Retry := True; + end; + end; + end; + end; + end; + end; + end; + + if Result = '' then begin + for DependencyIndex := 0 to DependencyCount - 1 do begin + Dependency_DownloadPage.SetText(Dependency_List[DependencyIndex].Title, ''); + Dependency_DownloadPage.SetProgress(DependencyIndex + 1, DependencyCount + 1); + + while True do begin + ResultCode := 0; + if ShellExec('', ExpandConstant('{tmp}{\}') + Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then begin + if Dependency_List[DependencyIndex].RestartAfter then begin + if DependencyIndex = DependencyCount - 1 then begin + Dependency_NeedRestart := True; + end else begin + NeedsRestart := True; + Result := Dependency_List[DependencyIndex].Title; + end; + break; + end else if (ResultCode = 0) or Dependency_List[DependencyIndex].ForceSuccess then begin // ERROR_SUCCESS (0) + break; + end else if ResultCode = 1641 then begin // ERROR_SUCCESS_REBOOT_INITIATED (1641) + NeedsRestart := True; + Result := Dependency_List[DependencyIndex].Title; + break; + end else if ResultCode = 3010 then begin // ERROR_SUCCESS_REBOOT_REQUIRED (3010) + Dependency_NeedRestart := True; + break; + end; + end; + + case SuppressibleMsgBox(FmtMessage(SetupMessage(msgErrorFunctionFailed), [Dependency_List[DependencyIndex].Title, IntToStr(ResultCode)]), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of + IDABORT: begin + Result := Dependency_List[DependencyIndex].Title; + break; + end; + IDIGNORE: begin + break; + end; + end; + end; + + if Result <> '' then begin + break; + end; + end; + + if NeedsRestart then begin + TempValue := '"' + ExpandConstant('{srcexe}') + '" /restart=1 /LANG="' + ExpandConstant('{language}') + '" /DIR="' + WizardDirValue + '" /GROUP="' + WizardGroupValue + '" /TYPE="' + WizardSetupType(False) + '" /COMPONENTS="' + WizardSelectedComponents(False) + '" /TASKS="' + WizardSelectedTasks(False) + '"'; + if WizardNoIcons then begin + TempValue := TempValue + ' /NOICONS'; + end; + RegWriteStringValue(HKA, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', '{#SetupSetting("AppName")}', TempValue); + end; + end; + + Dependency_DownloadPage.Hide; + end; +end; + + +function Dependency_Internal3(const Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +begin + Result := ''; + if MemoUserInfoInfo <> '' then begin + Result := Result + MemoUserInfoInfo + Newline + NewLine; + end; + if MemoDirInfo <> '' then begin + Result := Result + MemoDirInfo + Newline + NewLine; + end; + if MemoTypeInfo <> '' then begin + Result := Result + MemoTypeInfo + Newline + NewLine; + end; + if MemoComponentsInfo <> '' then begin + Result := Result + MemoComponentsInfo + Newline + NewLine; + end; + if MemoGroupInfo <> '' then begin + Result := Result + MemoGroupInfo + Newline + NewLine; + end; + if MemoTasksInfo <> '' then begin + Result := Result + MemoTasksInfo; + end; + + if Dependency_Memo <> '' then begin + if MemoTasksInfo = '' then begin + Result := Result + SetupMessage(msgReadyMemoTasks); + end; + Result := Result + FmtMessage(Dependency_Memo, [Space]); + end; +end; + + +function Dependency_Internal4: Boolean; +begin + Result := Dependency_NeedRestart; +end; + +function Dependency_IsX64: Boolean; +begin + Result := not Dependency_ForceX86 and Is64BitInstallMode; +end; + +function Dependency_String(const x86, x64: String): String; +begin + if Dependency_IsX64 then begin + Result := x64; + end else begin + Result := x86; + end; +end; + +function Dependency_ArchSuffix: String; +begin + Result := Dependency_String('', '_x64'); +end; + +function Dependency_ArchTitle: String; +begin + Result := Dependency_String(' (x86)', ' (x64)'); +end; + +function Dependency_IsNetCoreInstalled(const Version: String): Boolean; +var + ResultCode: Integer; +begin + // source code: https://github.com/dotnet/deployment-tools/tree/master/src/clickonce/native/projects/NetCoreCheck + if not FileExists(ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe') then begin + ExtractTemporaryFile('netcorecheck' + Dependency_ArchSuffix + '.exe'); + end; + Result := ShellExec('', ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe', Version, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0); +end; + +procedure Dependency_AddDotNet35; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net35-sp1 + if not IsDotNetInstalled(net35, 1) then begin + Dependency_Add('dotnetfx35.exe', + '/lang:enu /passive /norestart', + '.NET Framework 3.5 Service Pack 1', + 'https://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet40; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net40 + if not IsDotNetInstalled(net4full, 0) then begin + Dependency_Add('dotNetFx40_Full_setup.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.0', + 'https://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet45; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net452 + if not IsDotNetInstalled(net452, 0) then begin + Dependency_Add('dotnetfx45.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.5.2', + 'https://go.microsoft.com/fwlink/?LinkId=397707', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet46; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net462 + if not IsDotNetInstalled(net462, 0) then begin + Dependency_Add('dotnetfx46.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.6.2', + 'https://go.microsoft.com/fwlink/?linkid=780596', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet47; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net472 + if not IsDotNetInstalled(net472, 0) then begin + Dependency_Add('dotnetfx47.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.7.2', + 'https://go.microsoft.com/fwlink/?LinkId=863262', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet48; +begin + // https://dotnet.microsoft.com/download/dotnet-framework/net48 + if not IsDotNetInstalled(net48, 0) then begin + Dependency_Add('dotnetfx48.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.8', + 'https://go.microsoft.com/fwlink/?LinkId=2085155', + '', False, False); + end; +end; + +procedure Dependency_AddNetCore31; +begin + // https://dotnet.microsoft.com/download/dotnet-core/3.1 + if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 3.1.22') then begin + Dependency_Add('netcore31' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Core Runtime 3.1.22' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c2437aed-8cc4-41d0-a239-d6c7cf7bddae/062c37e8b06df740301c0bca1b0b7b9a/dotnet-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/4e95705e-1bb6-4764-b899-1b97eb70ea1d/dd311e073bd3e25b2efe2dcf02727e81/dotnet-runtime-3.1.22-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddNetCore31Asp; +begin + // https://dotnet.microsoft.com/download/dotnet-core/3.1 + if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 3.1.22') then begin + Dependency_Add('netcore31asp' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + 'ASP.NET Core Runtime 3.1.22' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/0a1a2ee5-b8ed-4f0d-a4af-a7bce9a9ac2b/d452039b49d79e8897f272c3ab34b875/aspnetcore-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/80e52143-31e8-450e-aa94-b3f8484aaba9/4b69e5c77d50e7b367960a0079c90a99/aspnetcore-runtime-3.1.22-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddNetCore31Desktop; +begin + // https://dotnet.microsoft.com/download/dotnet-core/3.1 + if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 3.1.22') then begin + Dependency_Add('netcore31desktop' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Desktop Runtime 3.1.22' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/e4fcd574-4487-4b4b-8ca8-c23177c6f59f/c6d67a04956169dc21895cdcb42bf344/windowsdesktop-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/1c14e24b-7f31-42dc-ba3c-83295a2d6f7e/41b93591162dfe556cc160ae44fbe75e/windowsdesktop-runtime-3.1.22-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet50; +begin + // https://dotnet.microsoft.com/download/dotnet/5.0 + if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 5.0.13') then begin + Dependency_Add('dotnet50' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Runtime 5.0.13' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/4a79fcd5-d61b-4606-8496-68071c8099c6/2bf770ca40521e8c4563072592eadd06/dotnet-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/fccf43d2-3e62-4ede-b5a5-592a7ccded7b/6339f1fdfe3317df5b09adf65f0261ab/dotnet-runtime-5.0.13-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet50Asp; +begin + // https://dotnet.microsoft.com/download/dotnet/5.0 + if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 5.0.13') then begin + Dependency_Add('dotnet50asp' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + 'ASP.NET Core Runtime 5.0.13' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/340f9482-fc43-4ef7-b434-e2ed57f55cb3/c641b805cef3823769409a6dbac5746b/aspnetcore-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/aac560f3-eac8-437e-aebd-9830119deb10/6a3880161cf527e4ec71f67efe4d91ad/aspnetcore-runtime-5.0.13-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet50Desktop; +begin + // https://dotnet.microsoft.com/download/dotnet/5.0 + if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 5.0.13') then begin + Dependency_Add('dotnet50desktop' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Desktop Runtime 5.0.13' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c8125c6b-d399-4be3-b201-8f1394fc3b25/724758f754fc7b67daba74db8d6d91d9/windowsdesktop-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/2bfb80f2-b8f2-44b0-90c1-d3c8c1c8eac8/409dd3d3367feeeda048f4ff34b32e82/windowsdesktop-runtime-5.0.13-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet60; +begin + // https://dotnet.microsoft.com/download/dotnet/6.0 + if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 6.0.2') then begin + Dependency_Add('dotnet60' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Runtime 6.0.2' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/2c266f64-4c86-4209-8113-0146a9c93bef/f771275c8cb0df884dcfc290569fba3a/dotnet-runtime-6.0.2-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/0b3e8ad9-7914-4489-8d02-58b551c2efea/fdc3f3a171bf0b7bb90c01f5faa59fc4/dotnet-runtime-6.0.2-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet60Asp; +begin + // https://dotnet.microsoft.com/download/dotnet/6.0 + if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 6.0.2') then begin + Dependency_Add('dotnet60asp' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + 'ASP.NET Core Runtime 6.0.2' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/ad7d20a7-debf-4399-b59b-04419ae7adfe/73918e15d0bde4431546d8f659ed7381/aspnetcore-runtime-6.0.2-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/ef70aabf-e945-4a82-8303-7675e84a183c/a1ef3d32b8572842684974747eee034b/aspnetcore-runtime-6.0.2-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet60Desktop; +begin + // https://dotnet.microsoft.com/download/dotnet/6.0 + if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 6.0.2') then begin + Dependency_Add('dotnet60desktop' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Desktop Runtime 6.0.2' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/f5f7ed62-0973-400b-9772-4cf0eef96801/87959c77e1fceeafc40c867f9c238bbc/windowsdesktop-runtime-6.0.2-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/7fbe3ce3-4082-4995-93de-674038ac919b/56d3fa94d78dc3f39fc70d73ef174c93/windowsdesktop-runtime-6.0.2-win-x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2005; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=26347 + if not IsMsiProductInstalled(Dependency_String('{86C9D5AA-F00C-4921-B3F2-C60AF92E2844}', '{A8D19029-8E5C-4E22-8011-48070F9E796E}'), PackVersionComponents(8, 0, 61000, 0)) then begin + Dependency_Add('vcredist2005' + Dependency_ArchSuffix + '.exe', + '/q', + 'Visual C++ 2005 Service Pack 1 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE', 'https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2008; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=26368 + if not IsMsiProductInstalled(Dependency_String('{DE2C306F-A067-38EF-B86C-03DE4B0312F9}', '{FDA45DDF-8E17-336F-A3ED-356B7B7C688A}'), PackVersionComponents(9, 0, 30729, 6161)) then begin + Dependency_Add('vcredist2008' + Dependency_ArchSuffix + '.exe', + '/q', + 'Visual C++ 2008 Service Pack 1 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe', 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2010; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=26999 + if not IsMsiProductInstalled(Dependency_String('{1F4F1D2A-D9DA-32CF-9909-48485DA06DD5}', '{5B75F761-BAC8-33BC-A381-464DDDD813A3}'), PackVersionComponents(10, 0, 40219, 0)) then begin + Dependency_Add('vcredist2010' + Dependency_ArchSuffix + '.exe', + '/passive /norestart', + 'Visual C++ 2010 Service Pack 1 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe', 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2012; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=30679 + if not IsMsiProductInstalled(Dependency_String('{4121ED58-4BD9-3E7B-A8B5-9F8BAAE045B7}', '{EFA6AFA1-738E-3E00-8101-FD03B86B29D1}'), PackVersionComponents(11, 0, 61030, 0)) then begin + Dependency_Add('vcredist2012' + Dependency_ArchSuffix + '.exe', + '/passive /norestart', + 'Visual C++ 2012 Update 4 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe', 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2013; +begin + // https://support.microsoft.com/en-us/help/4032938 + if not IsMsiProductInstalled(Dependency_String('{B59F5BF1-67C8-3802-8E59-2CE551A39FC5}', '{20400CF0-DE7C-327E-9AE4-F0F38D9085F8}'), PackVersionComponents(12, 0, 40664, 0)) then begin + Dependency_Add('vcredist2013' + Dependency_ArchSuffix + '.exe', + '/passive /norestart', + 'Visual C++ 2013 Update 5 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://download.visualstudio.microsoft.com/download/pr/10912113/5da66ddebb0ad32ebd4b922fd82e8e25/vcredist_x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/10912041/cee5d6bca2ddbcd039da727bf4acb48a/vcredist_x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddVC2015To2022; +begin + // https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist + if not IsMsiProductInstalled(Dependency_String('{65E5BD06-6392-3027-8C26-853107D3CF1A}', '{36F68A90-239C-34DF-B58C-64B30153CE35}'), PackVersionComponents(14, 30, 30704, 0)) then begin + Dependency_Add('vcredist2022' + Dependency_ArchSuffix + '.exe', + '/passive /norestart', + 'Visual C++ 2015-2022 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://aka.ms/vs/17/release/vc_redist.x86.exe', 'https://aka.ms/vs/17/release/vc_redist.x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDirectX; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=35 + Dependency_Add('dxwebsetup.exe', + '/q', + 'DirectX Runtime', + 'https://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe', + '', True, False); +end; + +procedure Dependency_AddSql2008Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=30438 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(10, 50, 4000, 0)) < 0) then begin + Dependency_Add('sql2008express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2008 R2 Service Pack 2 Express', + Dependency_String('https://download.microsoft.com/download/0/4/B/04BE03CD-EAF3-4797-9D8D-2E08E316C998/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/0/4/B/04BE03CD-EAF3-4797-9D8D-2E08E316C998/SQLEXPR_x64_ENU.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddSql2012Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=56042 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(11, 0, 7001, 0)) < 0) then begin + Dependency_Add('sql2012express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2012 Service Pack 4 Express', + Dependency_String('https://download.microsoft.com/download/B/D/E/BDE8FAD6-33E5-44F6-B714-348F73E602B6/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/B/D/E/BDE8FAD6-33E5-44F6-B714-348F73E602B6/SQLEXPR_x64_ENU.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddSql2014Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=57473 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(12, 0, 6024, 0)) < 0) then begin + Dependency_Add('sql2014express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2014 Service Pack 3 Express', + Dependency_String('https://download.microsoft.com/download/3/9/F/39F968FA-DEBB-4960-8F9E-0E7BB3035959/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/3/9/F/39F968FA-DEBB-4960-8F9E-0E7BB3035959/SQLEXPR_x64_ENU.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddSql2016Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=56840 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(13, 0, 5026, 0)) < 0) then begin + Dependency_Add('sql2016express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2016 Service Pack 2 Express', + 'https://download.microsoft.com/download/3/7/6/3767D272-76A1-4F31-8849-260BD37924E4/SQLServer2016-SSEI-Expr.exe', + '', False, False); + end; +end; + +procedure Dependency_AddSql2017Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=55994 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(14, 0, 0, 0)) < 0) then begin + Dependency_Add('sql2017express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2017 Express', + 'https://download.microsoft.com/download/5/E/9/5E9B18CC-8FD5-467E-B5BF-BADE39C51F73/SQLServer2017-SSEI-Expr.exe', + '', False, False); + end; +end; + +procedure Dependency_AddSql2019Express; +var + Version: String; + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-us/download/details.aspx?id=101064 + if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(15, 0, 0, 0)) < 0) then begin + Dependency_Add('sql2019express' + Dependency_ArchSuffix + '.exe', + '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', + 'SQL Server 2019 Express', + 'https://download.microsoft.com/download/7/f/8/7f8a9c43-8c8a-4f7c-9f92-83c18d96b681/SQL2019-SSEI-Expr.exe', + '', False, False); + end; +end; + + +[Setup] +; ------------- +; EXAMPLE SETUP +; ------------- +#ifndef Dependency_NoExampleSetup + +; comment out dependency defines to disable installing them +#define UseDotNet35 +#define UseDotNet40 +#define UseDotNet45 +#define UseDotNet46 +#define UseDotNet47 +#define UseDotNet48 + +; requires netcorecheck.exe and netcorecheck_x64.exe (see download link below) +#define UseNetCoreCheck +#ifdef UseNetCoreCheck + #define UseNetCore31 + #define UseNetCore31Asp + #define UseNetCore31Desktop + #define UseDotNet50 + #define UseDotNet50Asp + #define UseDotNet50Desktop + #define UseDotNet60 + #define UseDotNet60Asp + #define UseDotNet60Desktop +#endif + +#define UseVC2005 +#define UseVC2008 +#define UseVC2010 +#define UseVC2012 +#define UseVC2013 +#define UseVC2015To2022 + +; requires dxwebsetup.exe (see download link below) +;#define UseDirectX + +#define UseSql2008Express +#define UseSql2012Express +#define UseSql2014Express +#define UseSql2016Express +#define UseSql2017Express +#define UseSql2019Express + +#define MyAppSetupName 'MyProgram' +#define MyAppVersion '1.0' +#define MyAppPublisher 'Inno Setup' +#define MyAppCopyright 'Copyright © Inno Setup' +#define MyAppURL 'https://jrsoftware.org/isinfo.php' + +AppName={#MyAppSetupName} +AppVersion={#MyAppVersion} +AppVerName={#MyAppSetupName} {#MyAppVersion} +AppCopyright={#MyAppCopyright} +VersionInfoVersion={#MyAppVersion} +VersionInfoCompany={#MyAppPublisher} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +OutputBaseFilename={#MyAppSetupName}-{#MyAppVersion} +DefaultGroupName={#MyAppSetupName} +DefaultDirName={autopf}\{#MyAppSetupName} +UninstallDisplayIcon={app}\MyProgram.exe +SourceDir=src +OutputDir={#SourcePath}\bin +AllowNoIcons=yes +PrivilegesRequired=admin + +; remove next line if you only deploy 32-bit binaries and dependencies +ArchitecturesInstallIn64BitMode=x64 + +[Languages] +Name: en; MessagesFile: "compiler:Default.isl" +Name: nl; MessagesFile: "compiler:Languages\Dutch.isl" +Name: de; MessagesFile: "compiler:Languages\German.isl" + +[Files] +#ifdef UseNetCoreCheck +; download netcorecheck.exe: https://go.microsoft.com/fwlink/?linkid=2135256 +; download netcorecheck_x64.exe: https://go.microsoft.com/fwlink/?linkid=2135504 +Source: "netcorecheck.exe"; Flags: dontcopy noencryption +Source: "netcorecheck_x64.exe"; Flags: dontcopy noencryption +#endif + +#ifdef UseDirectX +Source: "dxwebsetup.exe"; Flags: dontcopy noencryption +#endif + +Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Dependency_IsX64; Flags: ignoreversion +Source: "MyProg.exe"; DestDir: "{app}"; Check: not Dependency_IsX64; Flags: ignoreversion + +[Icons] +Name: "{group}\{#MyAppSetupName}"; Filename: "{app}\MyProg.exe" +Name: "{group}\{cm:UninstallProgram,{#MyAppSetupName}}"; Filename: "{uninstallexe}" +Name: "{commondesktop}\{#MyAppSetupName}"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}" + +[Run] +Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,{#MyAppSetupName}}"; Flags: nowait postinstall skipifsilent + +[Code] +function InitializeSetup: Boolean; +begin +#ifdef UseDotNet35 + Dependency_AddDotNet35; +#endif +#ifdef UseDotNet40 + Dependency_AddDotNet40; +#endif +#ifdef UseDotNet45 + Dependency_AddDotNet45; +#endif +#ifdef UseDotNet46 + Dependency_AddDotNet46; +#endif +#ifdef UseDotNet47 + Dependency_AddDotNet47; +#endif +#ifdef UseDotNet48 + Dependency_AddDotNet48; +#endif + +#ifdef UseNetCore31 + Dependency_AddNetCore31; +#endif +#ifdef UseNetCore31Asp + Dependency_AddNetCore31Asp; +#endif +#ifdef UseNetCore31Desktop + Dependency_AddNetCore31Desktop; +#endif +#ifdef UseDotNet50 + Dependency_AddDotNet50; +#endif +#ifdef UseDotNet50Asp + Dependency_AddDotNet50Asp; +#endif +#ifdef UseDotNet50Desktop + Dependency_AddDotNet50Desktop; +#endif +#ifdef UseDotNet60 + Dependency_AddDotNet60; +#endif +#ifdef UseDotNet60Asp + Dependency_AddDotNet60Asp; +#endif +#ifdef UseDotNet60Desktop + Dependency_AddDotNet60Desktop; +#endif + +#ifdef UseVC2005 + Dependency_AddVC2005; +#endif +#ifdef UseVC2008 + Dependency_AddVC2008; +#endif +#ifdef UseVC2010 + Dependency_AddVC2010; +#endif +#ifdef UseVC2012 + Dependency_AddVC2012; +#endif +#ifdef UseVC2013 + //Dependency_ForceX86 := True; // force 32-bit install of next dependencies + Dependency_AddVC2013; + //Dependency_ForceX86 := False; // disable forced 32-bit install again +#endif +#ifdef UseVC2015To2022 + Dependency_AddVC2015To2022; +#endif + +#ifdef UseDirectX + ExtractTemporaryFile('dxwebsetup.exe'); + Dependency_AddDirectX; +#endif + +#ifdef UseSql2008Express + Dependency_AddSql2008Express; +#endif +#ifdef UseSql2012Express + Dependency_AddSql2012Express; +#endif +#ifdef UseSql2014Express + Dependency_AddSql2014Express; +#endif +#ifdef UseSql2016Express + Dependency_AddSql2016Express; +#endif +#ifdef UseSql2017Express + Dependency_AddSql2017Express; +#endif +#ifdef UseSql2019Express + Dependency_AddSql2019Express; +#endif + + Result := True; +end; + +#endif diff --git a/Setup/UDBuilder_setup.iss b/Setup/UDBuilder_setup.iss new file mode 100644 index 00000000..4e1ad1b7 --- /dev/null +++ b/Setup/UDBuilder_setup.iss @@ -0,0 +1,158 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +#define public Dependency_NoExampleSetup +#include "CodeDependencies.iss" + +#define UDB_arch "x64" + +[Setup] +AppName=Ultimate Doom Builder +AppVersion={code:GetBuildNumberString|..\Build\Builder.exe} +AppVerName=Ultimate Doom Builder {#SetupSetting("AppVersion")} ({#UDB_arch}) +AppPublisher=ZZYZX +AppPublisherURL=https://forum.zdoom.org/memberlist.php?mode=viewprofile&u=7527 +AppSupportURL=https://forum.zdoom.org/viewtopic.php?f=232&t=66745 +AppUpdatesURL=https://devbuilds.drdteam.org/ultimatedoombuilder/ +DefaultDirName={userpf}\Ultimate Doom Builder +DefaultGroupName=Ultimate Doom Builder +AllowNoIcons=true +LicenseFile=..\LICENSE.txt +OutputDir=..\Release +OutputBaseFilename=Setup +Compression=lzma/ultra64 +SolidCompression=true +SourceDir=..\Build +SetupLogging=false +AppMutex=ultimatedoombuilder +PrivilegesRequired=lowest +ShowLanguageDialog=no +LanguageDetectionMethod=none +MinVersion=0,6.1sp1 +UninstallDisplayIcon={app}\Updater.exe +WizardImageFile=..\Setup\WizModernImage-IS.bmp +WizardSmallImageFile=..\Setup\WizModernSmallImage-IS.bmp +#if UDB_arch != "x86" +ArchitecturesInstallIn64BitMode=x64 +ArchitecturesAllowed=x64 +#endif + +[Languages] +Name: english; MessagesFile: compiler:Default.isl + +[Tasks] +Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked + +[Files] +Source: Builder.exe; DestDir: {app}; Flags: ignoreversion +Source: Builder.pdb; DestDir: {app}; Flags: ignoreversion +Source: UDBuilder.default.cfg; DestDir: {app}; Flags: ignoreversion +Source: Updater.exe; DestDir: {app}; Flags: ignoreversion +Source: Updater.ini; DestDir: {app}; Flags: ignoreversion +Source: Refmanual.chm; DestDir: {app}; Flags: ignoreversion +Source: BuilderNative.dll; DestDir: {app}; Flags: ignoreversion +Source: SharpCompress.dll; DestDir: {app}; Flags: ignoreversion +Source: ScintillaNET.dll; DestDir: {app}; Flags: ignoreversion +Source: TabControlEX.dll; DestDir: {app}; Flags: ignoreversion +Source: LICENSE.txt; DestDir: {app}; Flags: ignoreversion +Source: Compilers\*; DestDir: {app}\Compilers; Flags: ignoreversion recursesubdirs +Source: Configurations\*; DestDir: {app}\Configurations; Flags: ignoreversion recursesubdirs +Source: Scripting\*; DestDir: {app}\Scripting; Flags: ignoreversion recursesubdirs +Source: Snippets\*; DestDir: {app}\Snippets; Flags: ignoreversion recursesubdirs +Source: UDBScript\Libraries\*; DestDir: {app}\UDBScript\Libraries; Flags: ignoreversion recursesubdirs +Source: UDBScript\Scripts\Examples\*; DestDir: {app}\UDBScript\Scripts\Examples; Flags: ignoreversion recursesubdirs +; NOTE: Don't use "Flags: ignoreversion" on any shared system files +Source: Plugins\AutomapMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\AutomapMode.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\BuilderModes.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\BuilderModes.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\BuilderEffects.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\BuilderEffects.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\ColorPicker.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\ColorPicker.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\CommentsPanel.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\CommentsPanel.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\NodesViewer.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\NodesViewer.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\SoundPropagationMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\SoundPropagationMode.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\StairSectorBuilder.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\StairSectorBuilder.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\TagExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\TagExplorer.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\TagRange.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\TagRange.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\ThreeDFloorMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\ThreeDFloorMode.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\UDBScript.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\UDBScript.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\VisplaneExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\VisplaneExplorer.pdb; DestDir: {app}\Plugins; Flags: ignoreversion +Source: Plugins\Loadorder.cfg; DestDir: {app}\Plugins; Flags: ignoreversion onlyifdoesntexist +Source: Plugins\Dependencies\*; DestDir: {app}\Plugins\Dependencies; Flags: ignoreversion +Source: Sprites\*; DestDir: {app}\Sprites; Flags: ignoreversion recursesubdirs +Source: Textures\*; DestDir: {app}\Textures; Flags: ignoreversion + +[Icons] +Name: {group}\Ultimate Doom Builder; Filename: {app}\Builder.exe +Name: {group}\{cm:UninstallProgram,Ultimate Doom Builder}; Filename: {uninstallexe} +Name: {commondesktop}\Ultimate Doom Builder; Filename: {app}\Builder.exe; Tasks: desktopicon + +[Run] +Filename: {app}\Builder.exe; Description: Run {#SetupSetting("AppName")}; Flags: postinstall skipifsilent + +[UninstallDelete] +Name: {app}; Type: filesandordirs + +;[InstallDelete] +;Name: {app}\Builder.pdb; Type: files +;Name: {app}\Builder.xml; Type: files + +[Registry] +Root: HKCU; Subkey: SOFTWARE\Ultimate Doom Builder\; ValueType: string; ValueName: Location; ValueData: {app}; Flags: uninsdeletevalue + +[Messages] +ReadyLabel2a=Continue to begin with the installation, or click Back if you want to review or change any settings. + +[Code] +// When the wizard initializes +procedure InitializeWizard(); +begin + // .Net and VC Redistributables. Those come from CodeDependencies.iss + Dependency_AddDotNet47; + Dependency_AddVC2015To2022; +end; + +//Remove configs? +procedure DeinitializeUninstall(); +begin + if MsgBox('Delete map restore data and program configuration files?', mbConfirmation, MB_YESNO) = IDYES then + begin + // Remove restore data + DelTree(ExpandConstant('{localappdata}\Doom Builder\Restore'), True, True, True); + + // Remove configs + DeleteFile(ExpandConstant('{localappdata}\Doom Builder\UDBuilder.cfg')); + DeleteFile(ExpandConstant('{localappdata}\Doom Builder\UDBuilder.log')); + DeleteFile(ExpandConstant('{localappdata}\Doom Builder\UDBCrash.txt')); + end; +end; + +function GetBuildNumberString(const Filename: String): String; +var + MS, LS: Cardinal; + Build: Cardinal; + Success: Boolean; + ASD: String; +begin + GetVersionNumbersString(Filename, ASD); + Success := GetVersionNumbers(Filename, MS, LS); + + if Success then + begin + Build := ls and $FFFF; + Result := Format('R%d', [Build]); + end + else + Result := 'Unknown version'; +end; diff --git a/Setup/gzbuilder_setup.iss b/Setup/gzbuilder_setup.iss deleted file mode 100755 index d7dd4e5b..00000000 --- a/Setup/gzbuilder_setup.iss +++ /dev/null @@ -1,281 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -[Setup] -AppName=Ultimate Doom Builder -AppVerName=Ultimate Doom Builder -AppPublisher=ZZYZX -AppPublisherURL=https://forum.zdoom.org/memberlist.php?mode=viewprofile&u=7527 -AppSupportURL=https://forum.zdoom.org/viewtopic.php?f=232&t=66745 -AppUpdatesURL=https://devbuilds.drdteam.org/ultimatedoombuilder/ -DefaultDirName={pf}\Ultimate Doom Builder -DefaultGroupName=Ultimate Doom Builder -AllowNoIcons=true -LicenseFile=..\LICENSE.txt -OutputDir=..\Release -OutputBaseFilename=Setup -Compression=lzma/ultra64 -SolidCompression=true -SourceDir=..\Build -SetupLogging=false -AppMutex=ultimatedoombuilder -PrivilegesRequired=admin -ShowLanguageDialog=no -LanguageDetectionMethod=none -MinVersion=0,6.0 -UninstallDisplayIcon={app}\Updater.exe -WizardImageFile=..\Setup\WizModernImage-IS.bmp -WizardSmallImageFile=..\Setup\WizModernSmallImage-IS.bmp - -[Languages] -Name: english; MessagesFile: compiler:Default.isl - -[Tasks] -Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked - -[Files] -Source: Setup\dotnetfx35setup.exe; DestDir: {tmp}; Flags: dontcopy -Source: Setup\vcredist_x86.exe; DestDir: {tmp}; Flags: dontcopy -Source: Builder.exe; DestDir: {app}; Flags: ignoreversion -Source: GZBuilder.default.cfg; DestDir: {app}; Flags: ignoreversion -Source: Updater.exe; DestDir: {app}; Flags: ignoreversion -Source: Updater.ini; DestDir: {app}; Flags: ignoreversion -Source: Refmanual.chm; DestDir: {app}; Flags: ignoreversion -Source: DevIL.dll; DestDir: {app}; Flags: ignoreversion -Source: BuilderNative.dll; DestDir: {app}; Flags: ignoreversion -Source: SharpCompress.dll; DestDir: {app}; Flags: ignoreversion -Source: ScintillaNET.dll; DestDir: {app}; Flags: ignoreversion -Source: TabControlEX.dll; DestDir: {app}; Flags: ignoreversion -Source: LICENSE.txt; DestDir: {app}; Flags: ignoreversion -Source: Compilers\*; DestDir: {app}\Compilers; Flags: ignoreversion recursesubdirs -Source: Configurations\*; DestDir: {app}\Configurations; Flags: ignoreversion recursesubdirs -Source: Scripting\*; DestDir: {app}\Scripting; Flags: ignoreversion recursesubdirs -Source: Snippets\*; DestDir: {app}\Snippets; Flags: ignoreversion recursesubdirs -; NOTE: Don't use "Flags: ignoreversion" on any shared system files -Source: Plugins\BuilderModes.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\BuilderEffects.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\ColorPicker.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\CommentsPanel.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\NodesViewer.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\SoundPropagationMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\StairSectorBuilder.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\TagExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\TagRange.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\VisplaneExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion -Source: Plugins\Loadorder.cfg; DestDir: {app}\Plugins; Flags: ignoreversion onlyifdoesntexist -Source: Sprites\*; DestDir: {app}\Sprites; Flags: ignoreversion recursesubdirs -Source: Textures\*; DestDir: {app}\Textures; Flags: ignoreversion - -[Icons] -Name: {group}\Ultimate Doom Builder; Filename: {app}\Builder.exe -Name: {group}\{cm:UninstallProgram,Ultimate Doom Builder}; Filename: {uninstallexe} -Name: {commondesktop}\Ultimate Doom Builder; Filename: {app}\Builder.exe; Tasks: desktopicon - -[UninstallDelete] -Name: {app}; Type: filesandordirs - -[InstallDelete] -Name: {app}\Builder.pdb; Type: files -Name: {app}\Builder.xml; Type: files - -[Registry] -Root: HKLM; Subkey: SOFTWARE\UDB\Ultimate Doom Builder\; ValueType: string; ValueName: Location; ValueData: {app}; Flags: uninsdeletevalue - -[Messages] -ReadyLabel2a=Continue to begin with the installation, or click Back if you want to review or change any settings. - -[Code] -// Global variables -var - page_info_net: TOutputMsgWizardPage; - page_info_netfailed: TOutputMsgWizardPage; - page_setup_net: TOutputProgressWizardPage; - page_info_vc: TOutputMsgWizardPage; - page_info_vcfailed: TOutputMsgWizardPage; - page_setup_vc: TOutputProgressWizardPage; - restartneeded: Boolean; - netinstallfailed: Boolean; - netisinstalled: Boolean; - vcinstallfailed: Boolean; - vcisinstalled: Boolean; - -// Prerequisites checks -function CheckNetIsInstalled(): Boolean; -begin - Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5') or - RegKeyExists(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5'); -end; - -function CheckVCIsInstalled(): Boolean; -begin - //mxd. Any VC++ 2008 package will do, I assume... - //mxd. Registry values gartered from http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx - Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}') or - RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A25302D-30C0-39D9-BD6F-21E6EC160475}') or - RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}'); -end; - -// When the wizard initializes -procedure InitializeWizard(); -begin - restartneeded := false; - netinstallfailed := false; - netisinstalled := CheckNetIsInstalled(); - vcinstallfailed := false; - vcisinstalled := CheckVCIsInstalled(); - - // Create .NET Framework pages - page_info_net := CreateOutputMsgPage(wpPreparing, - 'Installing Microsoft .NET Framework 3.5', '', - 'Setup has detected that your system is missing the required version of the Microsoft .NET Framework. ' + - 'Setup will now install or update your Microsoft .NET Framework. This may take several minutes to complete.' + #10 + #10 + - 'WARNING: The installer will download the Microsoft .NET Framework from the internet, but the progress bar will not ' + - 'go forward until the download is complete. You may send Microsoft an angry letter about that.' + #10 + #10 + - 'Click Install to begin.'); - - page_info_netfailed := CreateOutputMsgPage(page_info_net.ID, - 'Installing Microsoft .NET Framework 3.5', '', - 'Setup could not install the Microsoft .NET Framework 3.5.' + #10 + #10 + - 'Click Back to try again, or Cancel to exit Setup.'); - - page_setup_net := CreateOutputProgressPage('Installing Microsoft .NET Framework 3.5', 'Setup is installing Microsoft .NET Framework 3.5, please wait...'); - - // Create VC++ 2008 pages - page_info_vc := CreateOutputMsgPage(wpPreparing, - 'Installing Visual C++ 2008 SP1 ATL Security Update', '', - 'Setup has detected that your system is missing the required version of the Visual C++ Runtime. ' + - 'Setup will now install or update your Visual C++ Runtime. This may take several minutes to complete.' + #10 + #10 + - 'Click Install to begin.'); - - page_info_vcfailed := CreateOutputMsgPage(page_info_net.ID, - 'Installing Visual C++ 2008 SP1 ATL Security Update', '', - 'Setup could not install Visual C++ 2008 SP1 ATL Security Update.' + #10 + #10 + - 'Click Back to try again, or Cancel to exit Setup.'); - - page_setup_vc := CreateOutputProgressPage('Installing Visual C++ 2008 SP1 ATL Security Update', 'Setup is installing Visual C++ 2008 SP1 ATL Security Update, please wait...'); -end; - -// This is called to check if a page must be skipped -function ShouldSkipPage(PageID: Integer): Boolean; -begin - if(PageID = page_info_net.ID) then // Skip .NET pages? - Result := netisinstalled - else if(PageID = page_info_netfailed.ID) then - Result := (not netinstallfailed) and netisinstalled - else if(PageID = page_info_vc.ID) then // Skip VC++ pages? - Result := vcisinstalled - else if(PageID = page_info_vcfailed.ID) then - Result := (not vcinstallfailed) and vcisinstalled - else - Result := false; -end; - -// This is called to determine if we need to restart -function NeedRestart(): Boolean; -begin - Result := restartneeded; -end; - -// This is called when the current page changes -procedure CurPageChanged(CurPageID: Integer); -begin - if(CurPageID = wpReady) then begin - if(netisinstalled = false) or (vcisinstalled = false) then - WizardForm.NextButton.Caption := 'Next'; - end - else if(CurPageID = page_info_net.ID) or (CurPageID = page_info_vc.ID) then begin - WizardForm.NextButton.Caption := 'Install'; - end - else if(CurPageID = page_info_netfailed.ID) or (CurPageID = page_info_vcfailed.ID) then begin - WizardForm.NextButton.Visible := true; - WizardForm.NextButton.Enabled := false; - WizardForm.BackButton.Visible := true; - WizardForm.BackButton.Enabled := true; - WizardForm.CancelButton.Visible := true; - WizardForm.CancelButton.Enabled := true; - end; -end; - -// This is called when the Next button is clicked -function NextButtonClick(CurPage: Integer): Boolean; -var - errorcode: Integer; - tempfile: String; -begin - - // Next pressed on .NET info page? - if(CurPage = page_info_net.ID) then begin - // Show progress page and run setup - page_setup_net.Show; - try - begin - netinstallfailed := false; - ExtractTemporaryFile('dotnetfx35setup.exe'); - // We copy the file to the real temp directory so that it isn't removed when Setup is closed. - // Judging from the return codes, this installer may want to run again after a reboot. - // See the return codes here: http://msdn.microsoft.com/en-us/library/cc160716.aspx - tempfile := RemoveBackslash(GetTempDir()) + '\dotnetfx35setup.exe'; - FileCopy(ExpandConstant('{tmp}\dotnetfx35setup.exe'), tempfile, false); - Exec(tempfile, '/qb /norestart', '', SW_SHOW, ewWaitUntilTerminated, errorcode); - - if((errorcode = 1641) or (errorcode = 3010)) then begin - // Success, but restart needed! - restartneeded := true; - end - else if(errorcode <> 0) then begin - netinstallfailed := true; - end; - - netisinstalled := CheckNetIsInstalled(); - end - finally - page_setup_net.Hide; - end; - end - // Next pressed on VC info page? - else if(CurPage = page_info_vc.ID) then begin - // Show progress page and run setup - page_setup_vc.Show; - try - begin - vcinstallfailed := false; - ExtractTemporaryFile('vcredist_x86.exe'); - // We copy the file to the real temp directory so that it isn't removed when Setup is closed. - // Judging from the return codes, this installer may want to run again after a reboot. - // See the return codes here: http://blogs.msdn.com/b/astebner/archive/2010/10/20/10078468.aspx - tempfile := RemoveBackslash(GetTempDir()) + '\vcredist_x86.exe'; - FileCopy(ExpandConstant('{tmp}\vcredist_x86.exe'), tempfile, false); - Exec(tempfile, '/q /norestart', '', SW_SHOW, ewWaitUntilTerminated, errorcode); - - if(errorcode = 3010) then begin - // Success, but restart needed! - restartneeded := true; - end - else if(errorcode <> 0) then begin - vcinstallfailed := true; - end; - - vcisinstalled := CheckVCIsInstalled(); - end - finally - page_setup_vc.Hide; - end; - end; - - Result := True; -end; - -//Remove configs? -procedure DeinitializeUninstall(); -begin - if MsgBox('Delete map restore data and program configuration files?', mbConfirmation, MB_YESNO) = IDYES then - begin - // Remove restore data - DelTree(ExpandConstant('{localappdata}\Doom Builder\Restore'), True, True, True); - - // Remove configs - DeleteFile(ExpandConstant('{localappdata}\Doom Builder\GZBuilder.cfg')); - DeleteFile(ExpandConstant('{localappdata}\Doom Builder\GZBuilder.log')); - DeleteFile(ExpandConstant('{localappdata}\Doom Builder\GZCrash.txt')); - end; -end; \ No newline at end of file diff --git a/build_git_generic.cmd b/build_git_generic.cmd index 38d8b2d6..b65bcd1e 100755 --- a/build_git_generic.cmd +++ b/build_git_generic.cmd @@ -132,13 +132,13 @@ IF NOT DEFINED BUILD_RELEASE GOTO PACKGIT set DEL_PATHSPEC="%DB_OUTDIR%\UltimateDoomBuilder-Setup*-%PLATFORM%.exe" IF EXIST %DEL_PATHSPEC% DEL /F /Q %DEL_PATHSPEC% > NUL -"%ISSDIR%\iscc.exe" "Setup\gzbuilder_setup.iss" +"%ISSDIR%\iscc.exe" /DUDB_arch=%PLATFORM% "Setup\UDBuilder_setup.iss" IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL IF NOT EXIST "%DB_OUTDIR%\Setup.exe" GOTO FILEFAIL REN "%DB_OUTDIR%\Setup.exe" "UltimateDoomBuilder-Setup-R%REVISIONNUMBER%-%PLATFORM%.exe" -GOTO BUILDDONE +REM GOTO BUILDDONE :PACKGIT SET DEL_PATHSPEC="%DB_OUTDIR%\UltimateDoomBuilder*-%PLATFORM%.7z"