From a2505011d96afbcb5ed48eb71520666767483629 Mon Sep 17 00:00:00 2001 From: Alessandro Autiero Date: Tue, 9 Jul 2024 20:38:01 +0200 Subject: [PATCH] Release 9.2.2 --- cli/lib/src/server.dart | 2 +- common/lib/src/model/server_result.dart | 3 +- .../CodeDependencies.iss | 735 ------------------ .../InnoDependencyInstaller/netcorecheck.exe | Bin 118736 -> 0 bytes .../netcorecheck_x64.exe | Bin 146384 -> 0 bytes gui/dependencies/redist/VC_redist.x64.exe | Bin 0 -> 25397512 bytes gui/lib/main.dart | 1 - .../src/controller/backend_controller.dart | 23 +- .../src/messenger/implementation/server.dart | 86 +- gui/lib/src/widget/game_start_button.dart | 6 +- gui/pubspec.yaml | 2 +- .../exe/custom-inno-setup-script.iss | 50 +- 12 files changed, 126 insertions(+), 782 deletions(-) delete mode 100644 gui/dependencies/InnoDependencyInstaller/CodeDependencies.iss delete mode 100644 gui/dependencies/InnoDependencyInstaller/netcorecheck.exe delete mode 100644 gui/dependencies/InnoDependencyInstaller/netcorecheck_x64.exe create mode 100644 gui/dependencies/redist/VC_redist.x64.exe diff --git a/cli/lib/src/server.dart b/cli/lib/src/server.dart index 879437a..29a9f1f 100644 --- a/cli/lib/src/server.dart +++ b/cli/lib/src/server.dart @@ -7,7 +7,7 @@ Future startServerCli(String? host, int? port, ServerType type) async { stdout.writeln("Starting backend server..."); switch(type){ case ServerType.local: - var result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort); + final result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort); if(result == null){ throw Exception("Local backend server is not running"); } diff --git a/common/lib/src/model/server_result.dart b/common/lib/src/model/server_result.dart index 40063f7..348c9f5 100644 --- a/common/lib/src/model/server_result.dart +++ b/common/lib/src/model/server_result.dart @@ -26,8 +26,7 @@ enum ServerResultType { freePortError, pingingRemote, pingingLocal, - pingError, - processError; + pingError; bool get isError => name.contains("Error"); diff --git a/gui/dependencies/InnoDependencyInstaller/CodeDependencies.iss b/gui/dependencies/InnoDependencyInstaller/CodeDependencies.iss deleted file mode 100644 index 932bf8a..0000000 --- a/gui/dependencies/InnoDependencyInstaller/CodeDependencies.iss +++ /dev/null @@ -1,735 +0,0 @@ -[Code] -// https://github.com/DomGries/InnoDependencyInstaller - -// 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_NeedToRestart, 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; -#ifdef Dependency_CustomExecute - if {#Dependency_CustomExecute}(ExpandConstant('{tmp}{\}') + Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Parameters, ResultCode) then begin -#else - if ShellExec('', ExpandConstant('{tmp}{\}') + Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then begin -#endif - if Dependency_List[DependencyIndex].RestartAfter then begin - if DependencyIndex = DependencyCount - 1 then begin - Dependency_NeedToRestart := 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_NeedToRestart := 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; - -#ifndef Dependency_NoUpdateReadyMemo - -#endif -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_NeedRestart: Boolean; -begin - Result := Dependency_NeedToRestart; -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/main/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_AddDotNet481; -var - Version: Cardinal; -begin - // https://dotnet.microsoft.com/download/dotnet-framework/net481 - if not RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', Version) or (Version < 533320) then begin - Dependency_Add('dotnetfx481.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Framework 4.8.1', - 'https://go.microsoft.com/fwlink/?LinkId=2203304', - '', False, False); - end; -end; - -procedure Dependency_AddNetCore31; -begin - // https://dotnet.microsoft.com/download/dotnet-core/3.1 - if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 3.1.32') then begin - Dependency_Add('netcore31' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Core Runtime 3.1.32' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/de4b3438-24a2-4d1d-a845-97355cf97b71/515abb880478b49f7c1bced8fbf07b16/dotnet-runtime-3.1.32-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/476eba79-f17f-49c8-a213-0f24a22cd026/37c02de81ff5b76ac57a5427462395f1/dotnet-runtime-3.1.32-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddNetCore31Asp; -begin - // https://dotnet.microsoft.com/download/dotnet-core/3.1 - if not Dependency_IsNetCoreInstalled('-n Microsoft.AspNetCore.App -v 3.1.32') then begin - Dependency_Add('netcore31asp' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - 'ASP.NET Core Runtime 3.1.32' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/63b482d2-04b2-4dd4-baaf-d1e78de80738/40321091c872f4e77337b68fc61a5a07/aspnetcore-runtime-3.1.32-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/98910750-2644-472c-ab2b-17f315ccb953/c2a4c223ee11e2eec7d13744e7a45547/aspnetcore-runtime-3.1.32-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddNetCore31Desktop; -begin - // https://dotnet.microsoft.com/download/dotnet-core/3.1 - if not Dependency_IsNetCoreInstalled('-n Microsoft.WindowsDesktop.App -v 3.1.32') then begin - Dependency_Add('netcore31desktop' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Desktop Runtime 3.1.32' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/3f353d2c-0431-48c5-bdf6-fbbe8f901bb5/542a4af07c1df5136a98a1c2df6f3d62/windowsdesktop-runtime-3.1.32-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/b92958c6-ae36-4efa-aafe-569fced953a5/1654639ef3b20eb576174c1cc200f33a/windowsdesktop-runtime-3.1.32-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet50; -begin - // https://dotnet.microsoft.com/download/dotnet/5.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 5.0.17') then begin - Dependency_Add('dotnet50' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Runtime 5.0.17' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/54683c13-6b04-4d7d-b4d4-1f055b50ea43/e99048e2840d57040e8312058853a5b9/dotnet-runtime-5.0.17-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/a0832b5a-6900-442b-af79-6ffddddd6ba4/e2df0b25dd851ee0b38a86947dd0e42e/dotnet-runtime-5.0.17-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet50Asp; -begin - // https://dotnet.microsoft.com/download/dotnet/5.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.AspNetCore.App -v 5.0.17') then begin - Dependency_Add('dotnet50asp' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - 'ASP.NET Core Runtime 5.0.17' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/4bfa247d-321d-4b29-a34b-62320849059b/8df7a17d9aad4044efe9b5b1c423e82c/aspnetcore-runtime-5.0.17-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/3789ec90-2717-424f-8b9c-3adbbcea6c16/2085cc5ff077b8789ff938015392e406/aspnetcore-runtime-5.0.17-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet50Desktop; -begin - // https://dotnet.microsoft.com/download/dotnet/5.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.WindowsDesktop.App -v 5.0.17') then begin - Dependency_Add('dotnet50desktop' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Desktop Runtime 5.0.17' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/b6fe5f2a-95f4-46f1-9824-f5994f10bc69/db5ec9b47ec877b5276f83a185fdb6a0/windowsdesktop-runtime-5.0.17-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/3aa4e942-42cd-4bf5-afe7-fc23bd9c69c5/64da54c8864e473c19a7d3de15790418/windowsdesktop-runtime-5.0.17-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet60; -begin - // https://dotnet.microsoft.com/download/dotnet/6.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 6.0.20') then begin - Dependency_Add('dotnet60' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Runtime 6.0.20' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/3be5ee3a-c171-4cd2-ab98-00ca5c11eb8c/6fd31294b0c6c670ab5c060592935203/dotnet-runtime-6.0.20-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/3cfb6d2a-afbe-4ae7-8e5b-776f350654cc/6e8d858a60fe15381f3c84d8ca66c4a7/dotnet-runtime-6.0.20-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet60Asp; -begin - // https://dotnet.microsoft.com/download/dotnet/6.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.AspNetCore.App -v 6.0.20') then begin - Dependency_Add('dotnet60asp' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - 'ASP.NET Core Runtime 6.0.20' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/0e37c76c-53b4-4eea-8f5c-6ad2f8d5fe3c/88a8620329ced1aee271992a5b56d236/aspnetcore-runtime-6.0.20-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/be9f67fd-60af-45b1-9bca-a7bcc0e86e7e/6a750f7d7432937b3999bb4c5325062a/aspnetcore-runtime-6.0.20-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet60Desktop; -begin - // https://dotnet.microsoft.com/download/dotnet/6.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.WindowsDesktop.App -v 6.0.20') then begin - Dependency_Add('dotnet60desktop' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Desktop Runtime 6.0.20' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/0413b619-3eb2-4178-a78e-8d1aafab1a01/5247f08ea3c13849b68074a2142fbf31/windowsdesktop-runtime-6.0.20-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/1146f414-17c7-4184-8b10-1addfa5315e4/39db5573efb029130add485566320d74/windowsdesktop-runtime-6.0.20-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet70; -begin - // https://dotnet.microsoft.com/download/dotnet/7.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 7.0.9') then begin - Dependency_Add('dotnet70' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Runtime 7.0.9' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/305a85f5-2b0d-459b-b2ea-caf71b98d25d/805edc610efa49432e5e268bbba4eacb/dotnet-runtime-7.0.9-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/73058888-02a4-4f6d-b3cd-845531c2d7d0/a785e54b7f12046c00714b2ba759e173/dotnet-runtime-7.0.9-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet70Asp; -begin - // https://dotnet.microsoft.com/download/dotnet/7.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.AspNetCore.App -v 7.0.9') then begin - Dependency_Add('dotnet70asp' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - 'ASP.NET Core Runtime 7.0.9' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/6ec3b357-31df-4b18-948f-4979a5b4b99f/fdeec71fc7f0f34ecfa0cb8b2b897da0/aspnetcore-runtime-7.0.9-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/edd9c9b1-0c49-4297-9197-9392b2462318/d06fedaefb256d801ce94ade76af3ad9/aspnetcore-runtime-7.0.9-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet70Desktop; -begin - // https://dotnet.microsoft.com/download/dotnet/7.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.WindowsDesktop.App -v 7.0.9') then begin - Dependency_Add('dotnet70desktop' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Desktop Runtime 7.0.9' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/139b19d0-2d39-48ce-b59a-aec437509c20/ea6a2711eec53660c3b14d78b9fb2963/windowsdesktop-runtime-7.0.9-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/7727acb3-25ca-473b-a392-75afeb33cab7/f11f0477fd2fcfbb3111881377d0c9bb/windowsdesktop-runtime-7.0.9-win-x64.exe'), - '', False, False); - end; -end; - - -procedure Dependency_AddDotNet80; -begin - // https://dotnet.microsoft.com/download/dotnet/8.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 8.0.3') then begin - Dependency_Add('dotnet80' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Runtime 8.0.3' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c8d7a77c-5647-4e38-9ed8-edf82328497d/56130e071ac13c3660b0f3a0d60914c7/dotnet-runtime-8.0.3-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/961dfc84-ea72-48a2-b3f4-b82cefc34580/6ac50b6bf244a2c5481ad705a92cf843/dotnet-runtime-8.0.3-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet80Asp; -begin - // https://dotnet.microsoft.com/download/dotnet/8.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.AspNetCore.App -v 8.0.3') then begin - Dependency_Add('dotnet80asp' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - 'ASP.NET Core Runtime 8.0.3' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/e1efd12b-9598-4b70-ad83-496563ae3f7c/da67696e4232886f52d50bb8ecda5ab1/aspnetcore-runtime-8.0.3-win-x86.zip', 'https://download.visualstudio.microsoft.com/download/pr/e91876a9-1760-42cb-a6f4-97c57e9cca52/b433fcf4768929539f17e1908cb315bf/aspnetcore-runtime-8.0.3-win-x64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddDotNet80Desktop; -begin - // https://dotnet.microsoft.com/download/dotnet/8.0 - if not Dependency_IsNetCoreInstalled('-n Microsoft.WindowsDesktop.App -v 8.0.3') then begin - Dependency_Add('dotnet80desktop' + Dependency_ArchSuffix + '.exe', - '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart', - '.NET Desktop Runtime 8.0.3' + Dependency_ArchTitle, - Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c629f243-5125-4751-a5ff-e78fa45646b1/85777e3e3f58f863d884fd4b8a1453f2/windowsdesktop-runtime-8.0.3-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/51bc18ac-0594-412d-bd63-18ece4c91ac4/90b47b97c3bfe40a833791b166697e67/windowsdesktop-runtime-8.0.3-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 -#ifdef Dependency_Files_DirectX - ExtractTemporaryFile('dxwebsetup.exe'); -#endif - // 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=103447 - 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, 6404, 1)) < 0) then begin - Dependency_Add('sql2016express' + Dependency_ArchSuffix + '.exe', - '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', - 'SQL Server 2016 Service Pack 3 Express', - 'https://download.microsoft.com/download/f/a/8/fa83d147-63d1-449c-b22d-5fef9bd5bb46/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; - -procedure Dependency_AddSql2022Express; -var - Version: String; - PackedVersion: Int64; -begin - // https://www.microsoft.com/en-us/download/details.aspx?id=104781 - if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(16, 0, 1000, 6)) < 0) then begin - Dependency_Add('sql2022express' + Dependency_ArchSuffix + '.exe', - '/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER', - 'SQL Server 2022 Express', - 'https://go.microsoft.com/fwlink/p/?linkid=2216019', - '', False, False); - end; -end; - -procedure Dependency_AddWebView2; -begin - // https://developer.microsoft.com/en-us/microsoft-edge/webview2 - if not RegValueExists(HKLM, Dependency_String('SOFTWARE', 'SOFTWARE\WOW6432Node') + '\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv') then begin - Dependency_Add('MicrosoftEdgeWebview2Setup.exe', - '/silent /install', - 'WebView2 Runtime', - 'https://go.microsoft.com/fwlink/p/?LinkId=2124703', - '', False, False); - end; -end; - -procedure Dependency_AddAccessDatabaseEngine2010; -begin - // https://www.microsoft.com/en-us/download/details.aspx?id=13255 - if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\ACE') then begin - Dependency_Add('AccessDatabaseEngine2010' + Dependency_ArchSuffix + '.exe', - '/quiet', - 'Microsoft Access Database Engine 2010' + Dependency_ArchTitle, - Dependency_String('https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe', 'https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_X64.exe'), - '', False, False); - end; -end; - -procedure Dependency_AddAccessDatabaseEngine2016; -begin - // https://www.microsoft.com/en-us/download/details.aspx?id=54920 - if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE') then begin - Dependency_Add('AccessDatabaseEngine2016' + Dependency_ArchSuffix + '.exe', - '/quiet', - 'Microsoft Access Database Engine 2016' + Dependency_ArchTitle, - Dependency_String('https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine.exe', 'https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine_X64.exe'), - '', False, False); - end; -end; - -[Files] -#ifdef Dependency_Path_NetCoreCheck -; download netcorecheck.exe: https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x86 -; download netcorecheck_x64.exe: https://www.nuget.org/packages/Microsoft.NET.Tools.NETCoreCheck.x64 -Source: "{#Dependency_Path_NetCoreCheck}netcorecheck.exe"; Flags: dontcopy noencryption -Source: "{#Dependency_Path_NetCoreCheck}netcorecheck_x64.exe"; Flags: dontcopy noencryption -#endif - -#ifdef Dependency_Path_DirectX -Source: "{#Dependency_Path_DirectX}dxwebsetup.exe"; Flags: dontcopy noencryption -#endif \ No newline at end of file diff --git a/gui/dependencies/InnoDependencyInstaller/netcorecheck.exe b/gui/dependencies/InnoDependencyInstaller/netcorecheck.exe deleted file mode 100644 index a3c30b5bf019c7b8231233ae1341c94c9cc5808f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118736 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