From e5c98458e9aafbaedff1c68bf3d46dec0daeec98 Mon Sep 17 00:00:00 2001 From: AntonyCorbett Date: Sat, 21 Aug 2021 12:09:51 +0100 Subject: [PATCH] Include installation of .net 5 runtime in installer --- Installer/CodeDependencies.iss | 832 ++++++++++++++++++ Installer/OnlyMSetup.iss | 42 +- Installer/Test.runtimeconfig.json | 1 + Installer/netcorecheck.exe | Bin 0 -> 110512 bytes .../PublishProfiles/FolderProfile1.pubxml | 18 + SolutionInfo.cs | 2 +- 6 files changed, 893 insertions(+), 2 deletions(-) create mode 100644 Installer/CodeDependencies.iss create mode 100644 Installer/Test.runtimeconfig.json create mode 100644 Installer/netcorecheck.exe create mode 100644 OnlyM/Properties/PublishProfiles/FolderProfile1.pubxml diff --git a/Installer/CodeDependencies.iss b/Installer/CodeDependencies.iss new file mode 100644 index 00000000..b499d45c --- /dev/null +++ b/Installer/CodeDependencies.iss @@ -0,0 +1,832 @@ +; -- 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_InitializeWizard; +begin + Dependency_DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil); +end; + +function Dependency_PrepareToInstall(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_UpdateReadyMemo(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_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_AddMsi45; +var + PackedVersion: Int64; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=8483 + if not GetPackedVersion(ExpandConstant('{sys}{\}msi.dll'), PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(4, 5, 0, 0)) < 0) then begin + Dependency_Add('msi45' + Dependency_ArchSuffix + '.msu', + '/quiet /norestart', + 'Windows Installer 4.5', + Dependency_String('https://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x86.msu', 'https://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x64.msu'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet11; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=26 + if not IsDotNetInstalled(net11, 0) then begin + Dependency_Add('dotnetfx11.exe', + '/q', + '.NET Framework 1.1', + 'https://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe', + '', False, False); + end; + + // https://www.microsoft.com/en-US/download/details.aspx?id=33 + if not IsDotNetInstalled(net11, 1) then begin + Dependency_Add('dotnetfx11sp1.exe', + '/q', + '.NET Framework 1.1 Service Pack 1', + 'https://download.microsoft.com/download/8/b/4/8b4addd8-e957-4dea-bdb8-c4e00af5b94b/NDP1.1sp1-KB867460-X86.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet20; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=1639 + if not IsDotNetInstalled(net20, 2) then begin + Dependency_Add('dotnetfx20' + Dependency_ArchSuffix + '.exe', + '/lang:enu /passive /norestart', + '.NET Framework 2.0 Service Pack 2', + Dependency_String('https://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe', 'https://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x64.exe'), + '', False, False); + end; +end; + +procedure Dependency_AddDotNet35; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=22 + 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/0/6/1/061f001c-8752-4600-a198-53214c69b51f/dotnetfx35setup.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet40Client; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=24872 + if not IsDotNetInstalled(net4client, 0) and not IsDotNetInstalled(net4full, 0) then begin + Dependency_Add('dotNetFx40_Client_setup.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.0 Client', + 'https://download.microsoft.com/download/7/B/6/7B629E05-399A-4A92-B5BC-484C74B5124B/dotNetFx40_Client_setup.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet40Full; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=17718 + 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://www.microsoft.com/en-US/download/details.aspx?id=42643 + if not IsDotNetInstalled(net452, 0) then begin + Dependency_Add('dotnetfx45.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.5.2', + 'https://download.microsoft.com/download/B/4/1/B4119C11-0423-477B-80EE-7A474314B347/NDP452-KB2901954-Web.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet46; +begin + // https://www.microsoft.com/en-US/download/details.aspx?id=53345 + if not IsDotNetInstalled(net462, 0) then begin + Dependency_Add('dotnetfx46.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.6.2', + 'https://download.microsoft.com/download/D/5/C/D5C98AB0-35CC-45D9-9BA5-B18256BA2AE6/NDP462-KB3151802-Web.exe', + '', False, False); + end; +end; + +procedure Dependency_AddDotNet47; +begin + // https://support.microsoft.com/en-US/help/4054531 + if not IsDotNetInstalled(net472, 0) then begin + Dependency_Add('dotnetfx47.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Framework 4.7.2', + 'https://download.microsoft.com/download/0/5/C/05C1EC0E-D5EE-463B-BFE3-9311376A6809/NDP472-KB4054531-Web.exe', + '', 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://download.visualstudio.microsoft.com/download/pr/7afca223-55d2-470a-8edc-6a1739ae3252/c9b8749dd99fc0d4453b2a3e4c37ba16/ndp48-web.exe', + '', 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.16') then begin + Dependency_Add('netcore31' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Core Runtime 3.1.16' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166324', 'https://go.microsoft.com/fwlink/?linkid=2166228'), + '', 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.16') then begin + Dependency_Add('netcore31asp' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + 'ASP.NET Core Runtime 3.1.16' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166322', 'https://go.microsoft.com/fwlink/?linkid=2166226'), + '', 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.16') then begin + Dependency_Add('netcore31desktop' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Desktop Runtime 3.1.16' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166323', 'https://go.microsoft.com/fwlink/?linkid=2166227'), + '', 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.7') then begin + Dependency_Add('dotnet50' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Runtime 5.0.7' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166321', 'https://go.microsoft.com/fwlink/?linkid=2166225'), + '', 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.7') then begin + Dependency_Add('dotnet50asp' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + 'ASP.NET Core Runtime 5.0.7' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166319', 'https://go.microsoft.com/fwlink/?linkid=2166223'), + '', 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.7') then begin + Dependency_Add('dotnet50desktop' + Dependency_ArchSuffix + '.exe', + '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', + '.NET Desktop Runtime 5.0.7' + Dependency_ArchTitle, + Dependency_String('https://go.microsoft.com/fwlink/?linkid=2166320', 'https://go.microsoft.com/fwlink/?linkid=2166224'), + '', 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_AddVC2015To2019; +begin + // https://support.microsoft.com/en-US/help/2977003/the-latest-supported-visual-c-downloads + if not IsMsiProductInstalled(Dependency_String('{65E5BD06-6392-3027-8C26-853107D3CF1A}', '{36F68A90-239C-34DF-B58C-64B30153CE35}'), PackVersionComponents(14, 29, 30037, 0)) then begin + Dependency_Add('vcredist2019' + Dependency_ArchSuffix + '.exe', + '/passive /norestart', + 'Visual C++ 2015-2019 Redistributable' + Dependency_ArchTitle, + Dependency_String('https://aka.ms/vs/16/release/vc_redist.x86.exe', 'https://aka.ms/vs/16/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 UseMsi45 + +;#define UseDotNet11 +#define UseDotNet20 +#define UseDotNet35 +#define UseDotNet40Client +#define UseDotNet40Full +#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 +#endif + +#define UseVC2005 +#define UseVC2008 +#define UseVC2010 +#define UseVC2012 +#define UseVC2013 +#define UseVC2015To2019 + +; 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 + +MinVersion=6.0 +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] +procedure InitializeWizard; +begin + Dependency_InitializeWizard; +end; + +function PrepareToInstall(var NeedsRestart: Boolean): String; +begin + Result := Dependency_PrepareToInstall(NeedsRestart); +end; + +function NeedRestart: Boolean; +begin + Result := Dependency_NeedRestart; +end; + +function UpdateReadyMemo(const Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +begin + Result := Dependency_UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo); +end; + +function InitializeSetup: Boolean; +begin +#ifdef UseMsi45 + Dependency_AddMsi45; +#endif + +#ifdef UseDotNet11 + Dependency_AddDotNet11; +#endif +#ifdef UseDotNet20 + Dependency_AddDotNet20; +#endif +#ifdef UseDotNet35 + Dependency_AddDotNet35; +#endif +#ifdef UseDotNet40Client + Dependency_AddDotNet40Client; +#endif +#ifdef UseDotNet40Full + Dependency_AddDotNet40Full; +#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 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 UseVC2015To2019 + Dependency_AddVC2015To2019; +#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/Installer/OnlyMSetup.iss b/Installer/OnlyMSetup.iss index 08be7e8a..9d3d82f5 100644 --- a/Installer/OnlyMSetup.iss +++ b/Installer/OnlyMSetup.iss @@ -1,6 +1,9 @@ ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! +#define Dependency_NoExampleSetup +#include "CodeDependencies.iss" + #define MyAppName "OnlyM" #define MyAppPublisher "Antony Corbett" #define MyAppURL "https://soundboxsoftware.com" @@ -21,7 +24,7 @@ AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} -DefaultDirName={pf}\OnlyM +DefaultDirName={commonpf}\OnlyM DefaultGroupName={#MyAppName} OutputDir="..\Installer\Output" OutputBaseFilename=OnlyMSetup @@ -35,6 +38,9 @@ RestartApplications=False CloseApplications=False AppMutex=OnlyMMeetingMedia,OnlyMSlideManagerTool +PrivilegesRequired=admin + + [InstallDelete] ; remove legacy shortcuts (wrongly named SlideManagerAppExeName instead of SlideManagerAppName) Type: files; Name: "{group}\{#SlideManagerAppExeName}.lnk" @@ -73,6 +79,9 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{ [Files] Source: "..\OnlyM\bin\Release\net5.0-windows\publish\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs +// https://go.microsoft.com/fwlink/?linkid=2135256 +Source: "netcorecheck.exe"; Flags: dontcopy noencryption + ; web shortcuts... Source: "..\UrlLinkFiles\JW Broadcasting.url"; DestDir: "{commonappdata}\OnlyM\Websites" Source: "..\UrlLinkFiles\JW.org website.url"; DestDir: "{commonappdata}\OnlyM\Websites" @@ -87,3 +96,34 @@ Name: "{commondesktop}\{#SlideManagerAppName}"; Filename: "{app}\{#SlideManagerA [ThirdParty] UseRelativePaths=True +[Code] +procedure InitializeWizard; +begin + Dependency_InitializeWizard; +end; + +function PrepareToInstall(var NeedsRestart: Boolean): String; +begin + Result := Dependency_PrepareToInstall(NeedsRestart); +end; + +function NeedRestart: Boolean; +begin + Result := Dependency_NeedRestart; +end; + +function UpdateReadyMemo(const Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +begin + Result := Dependency_UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo); +end; + +function InitializeSetup: Boolean; +begin + // add dependencies (.NET 5 x86 desktop runtime) + Dependency_ForceX86 := true; + Dependency_AddDotNet50Desktop; + + Result := True; +end; + + diff --git a/Installer/Test.runtimeconfig.json b/Installer/Test.runtimeconfig.json new file mode 100644 index 00000000..8159d844 --- /dev/null +++ b/Installer/Test.runtimeconfig.json @@ -0,0 +1 @@ +{ "runtimeOptions": { "framework": { "name": "Microsoft.WindowsDesktop.App", "version": "5.0.7" } } } diff --git a/Installer/netcorecheck.exe b/Installer/netcorecheck.exe new file mode 100644 index 0000000000000000000000000000000000000000..5f4e825e6d60aa0724f9c09f326618e3a0f60766 GIT binary patch literal 110512 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 J(Q$m%{{z8TQoaBH literal 0 HcmV?d00001 diff --git a/OnlyM/Properties/PublishProfiles/FolderProfile1.pubxml b/OnlyM/Properties/PublishProfiles/FolderProfile1.pubxml new file mode 100644 index 00000000..d77c5451 --- /dev/null +++ b/OnlyM/Properties/PublishProfiles/FolderProfile1.pubxml @@ -0,0 +1,18 @@ + + + + + Release + x86 + bin\Release\net5.0-windows\publishSelfContained\ + FileSystem + net5.0-windows + win-x86 + true + False + True + False + + \ No newline at end of file diff --git a/SolutionInfo.cs b/SolutionInfo.cs index 06ade7f3..2fbb8f07 100644 --- a/SolutionInfo.cs +++ b/SolutionInfo.cs @@ -8,4 +8,4 @@ [assembly: AssemblyCulture("")] [assembly: NeutralResourcesLanguage("en-GB")] -[assembly: AssemblyVersion("2.0.0.9")] +[assembly: AssemblyVersion("2.0.0.10")]