mirror of
https://github.com/Auties00/Reboot-Launcher.git
synced 2026-01-13 19:22:22 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
170a878e79 | ||
|
|
a2505011d9 | ||
|
|
3e2c2e96b1 |
@@ -7,7 +7,7 @@ Future<bool> startServerCli(String? host, int? port, ServerType type) async {
|
|||||||
stdout.writeln("Starting backend server...");
|
stdout.writeln("Starting backend server...");
|
||||||
switch(type){
|
switch(type){
|
||||||
case ServerType.local:
|
case ServerType.local:
|
||||||
var result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort);
|
final result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort);
|
||||||
if(result == null){
|
if(result == null){
|
||||||
throw Exception("Local backend server is not running");
|
throw Exception("Local backend server is not running");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ enum ServerResultType {
|
|||||||
freePortError,
|
freePortError,
|
||||||
pingingRemote,
|
pingingRemote,
|
||||||
pingingLocal,
|
pingingLocal,
|
||||||
pingError,
|
pingError;
|
||||||
processError;
|
|
||||||
|
|
||||||
bool get isError => name.contains("Error");
|
bool get isError => name.contains("Error");
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
|
|
||||||
<event('InitializeWizard')>
|
|
||||||
procedure Dependency_InitializeWizard;
|
|
||||||
begin
|
|
||||||
Dependency_DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil);
|
|
||||||
end;
|
|
||||||
|
|
||||||
<event('PrepareToInstall')>
|
|
||||||
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
|
|
||||||
<event('UpdateReadyMemo')>
|
|
||||||
#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;
|
|
||||||
|
|
||||||
<event('NeedRestart')>
|
|
||||||
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
|
|
||||||
Binary file not shown.
Binary file not shown.
BIN
gui/dependencies/redist/VC_redist.x64.exe
Normal file
BIN
gui/dependencies/redist/VC_redist.x64.exe
Normal file
Binary file not shown.
@@ -16,7 +16,6 @@ import 'package:reboot_launcher/src/controller/game_controller.dart';
|
|||||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||||
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
||||||
import 'package:reboot_launcher/src/messenger/implementation/error.dart';
|
import 'package:reboot_launcher/src/messenger/implementation/error.dart';
|
||||||
import 'package:reboot_launcher/src/messenger/implementation/server.dart';
|
|
||||||
import 'package:reboot_launcher/src/page/implementation/home_page.dart';
|
import 'package:reboot_launcher/src/page/implementation/home_page.dart';
|
||||||
import 'package:reboot_launcher/src/util/os.dart';
|
import 'package:reboot_launcher/src/util/os.dart';
|
||||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||||
@@ -172,7 +171,6 @@ void _initWindow() => doWhenWindowReady(() async {
|
|||||||
appWindow.alignment = Alignment.center;
|
appWindow.alignment = Alignment.center;
|
||||||
}
|
}
|
||||||
|
|
||||||
appWindow.minSize = const Size(kDefaultWindowWidth, kDefaultWindowHeight);
|
|
||||||
if(isWin11) {
|
if(isWin11) {
|
||||||
await Window.setEffect(
|
await Window.setEffect(
|
||||||
effect: WindowEffect.acrylic,
|
effect: WindowEffect.acrylic,
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class BackendController extends GetxController {
|
|||||||
late final RxBool started;
|
late final RxBool started;
|
||||||
late final RxBool detached;
|
late final RxBool detached;
|
||||||
StreamSubscription? worker;
|
StreamSubscription? worker;
|
||||||
|
int? embeddedProcessPid;
|
||||||
HttpServer? localServer;
|
HttpServer? localServer;
|
||||||
HttpServer? remoteServer;
|
HttpServer? remoteServer;
|
||||||
|
|
||||||
@@ -148,11 +149,7 @@ class BackendController extends GetxController {
|
|||||||
switch(type()){
|
switch(type()){
|
||||||
case ServerType.embedded:
|
case ServerType.embedded:
|
||||||
final process = await startEmbeddedBackend(detached.value);
|
final process = await startEmbeddedBackend(detached.value);
|
||||||
watchProcess(process.pid)
|
embeddedProcessPid = process.pid;
|
||||||
.asStream()
|
|
||||||
.asBroadcastStream()
|
|
||||||
.where((_) => !started())
|
|
||||||
.map((_) => ServerResult(ServerResultType.processError));
|
|
||||||
break;
|
break;
|
||||||
case ServerType.remote:
|
case ServerType.remote:
|
||||||
yield ServerResult(ServerResultType.pingingRemote);
|
yield ServerResult(ServerResultType.pingingRemote);
|
||||||
@@ -166,7 +163,15 @@ class BackendController extends GetxController {
|
|||||||
remoteServer = await startRemoteBackendProxy(uriResult);
|
remoteServer = await startRemoteBackendProxy(uriResult);
|
||||||
break;
|
break;
|
||||||
case ServerType.local:
|
case ServerType.local:
|
||||||
if(portData != kDefaultBackendPort.toString()) {
|
if(portNumber != kDefaultBackendPort) {
|
||||||
|
yield ServerResult(ServerResultType.pingingLocal);
|
||||||
|
final uriResult = await pingBackend(kDefaultBackendHost, portNumber);
|
||||||
|
if(uriResult == null) {
|
||||||
|
yield ServerResult(ServerResultType.pingError);
|
||||||
|
started.value = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
localServer = await startRemoteBackendProxy(Uri.parse("http://$kDefaultBackendHost:$portData"));
|
localServer = await startRemoteBackendProxy(Uri.parse("http://$kDefaultBackendHost:$portData"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +211,11 @@ class BackendController extends GetxController {
|
|||||||
try{
|
try{
|
||||||
switch(type()){
|
switch(type()){
|
||||||
case ServerType.embedded:
|
case ServerType.embedded:
|
||||||
killProcessByPort(kDefaultBackendPort);
|
final embeddedProcessPid = this.embeddedProcessPid;
|
||||||
|
if(embeddedProcessPid != null) {
|
||||||
|
Process.killPid(embeddedProcessPid, ProcessSignal.sigterm);
|
||||||
|
this.embeddedProcessPid = null;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ServerType.remote:
|
case ServerType.remote:
|
||||||
await remoteServer?.close(force: true);
|
await remoteServer?.close(force: true);
|
||||||
|
|||||||
@@ -16,8 +16,17 @@ import 'package:reboot_launcher/src/util/cryptography.dart';
|
|||||||
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
||||||
import 'package:reboot_launcher/src/util/translations.dart';
|
import 'package:reboot_launcher/src/util/translations.dart';
|
||||||
|
|
||||||
|
final List<InfoBarEntry> _infoBars = [];
|
||||||
|
|
||||||
extension ServerControllerDialog on BackendController {
|
extension ServerControllerDialog on BackendController {
|
||||||
|
void cancelInteractive() {
|
||||||
|
worker?.cancel(); // Do not await or it will hang
|
||||||
|
_infoBars.forEach((infoBar) => infoBar.close());
|
||||||
|
_infoBars.clear();
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> toggleInteractive() async {
|
Future<bool> toggleInteractive() async {
|
||||||
|
cancelInteractive();
|
||||||
final stream = toggle();
|
final stream = toggle();
|
||||||
final completer = Completer<bool>();
|
final completer = Completer<bool>();
|
||||||
InfoBarEntry? entry;
|
InfoBarEntry? entry;
|
||||||
@@ -38,105 +47,113 @@ extension ServerControllerDialog on BackendController {
|
|||||||
log("[BACKEND] Handling event: $event");
|
log("[BACKEND] Handling event: $event");
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case ServerResultType.starting:
|
case ServerResultType.starting:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.startingServer,
|
translations.startingServer,
|
||||||
severity: InfoBarSeverity.info,
|
severity: InfoBarSeverity.info,
|
||||||
loading: true,
|
loading: true,
|
||||||
duration: null
|
duration: null
|
||||||
);
|
);
|
||||||
case ServerResultType.startSuccess:
|
case ServerResultType.startSuccess:
|
||||||
return showRebootInfoBar(
|
final embeddedProcessPid = this.embeddedProcessPid;
|
||||||
|
if(embeddedProcessPid != null) {
|
||||||
|
watchProcess(embeddedProcessPid).then((_) {
|
||||||
|
if(started.value) {
|
||||||
|
started.value = false;
|
||||||
|
_showRebootInfoBar(
|
||||||
|
translations.backendProcessError,
|
||||||
|
severity: InfoBarSeverity.error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return _showRebootInfoBar(
|
||||||
type.value == ServerType.local ? translations.checkedServer : translations.startedServer,
|
type.value == ServerType.local ? translations.checkedServer : translations.startedServer,
|
||||||
severity: InfoBarSeverity.success
|
severity: InfoBarSeverity.success
|
||||||
);
|
);
|
||||||
case ServerResultType.startError:
|
case ServerResultType.startError:
|
||||||
print(event.stackTrace);
|
print(event.stackTrace);
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
type.value == ServerType.local ? translations.localServerError(event.error ?? translations.unknownError) : translations.startServerError(event.error ?? translations.unknownError),
|
type.value == ServerType.local ? translations.localServerError(event.error ?? translations.unknownError) : translations.startServerError(event.error ?? translations.unknownError),
|
||||||
severity: InfoBarSeverity.error,
|
severity: InfoBarSeverity.error,
|
||||||
duration: infoBarLongDuration
|
duration: infoBarLongDuration
|
||||||
);
|
);
|
||||||
case ServerResultType.stopping:
|
case ServerResultType.stopping:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.stoppingServer,
|
translations.stoppingServer,
|
||||||
severity: InfoBarSeverity.info,
|
severity: InfoBarSeverity.info,
|
||||||
loading: true,
|
loading: true,
|
||||||
duration: null
|
duration: null
|
||||||
);
|
);
|
||||||
case ServerResultType.stopSuccess:
|
case ServerResultType.stopSuccess:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.stoppedServer,
|
translations.stoppedServer,
|
||||||
severity: InfoBarSeverity.success
|
severity: InfoBarSeverity.success
|
||||||
);
|
);
|
||||||
case ServerResultType.stopError:
|
case ServerResultType.stopError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.stopServerError(event.error ?? translations.unknownError),
|
translations.stopServerError(event.error ?? translations.unknownError),
|
||||||
severity: InfoBarSeverity.error,
|
severity: InfoBarSeverity.error,
|
||||||
duration: infoBarLongDuration
|
duration: infoBarLongDuration
|
||||||
);
|
);
|
||||||
case ServerResultType.missingHostError:
|
case ServerResultType.missingHostError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.missingHostNameError,
|
translations.missingHostNameError,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
);
|
);
|
||||||
case ServerResultType.missingPortError:
|
case ServerResultType.missingPortError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.missingPortError,
|
translations.missingPortError,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
);
|
);
|
||||||
case ServerResultType.illegalPortError:
|
case ServerResultType.illegalPortError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.illegalPortError,
|
translations.illegalPortError,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
);
|
);
|
||||||
case ServerResultType.freeingPort:
|
case ServerResultType.freeingPort:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.freeingPort,
|
translations.freeingPort,
|
||||||
loading: true,
|
loading: true,
|
||||||
duration: null
|
duration: null
|
||||||
);
|
);
|
||||||
case ServerResultType.freePortSuccess:
|
case ServerResultType.freePortSuccess:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.freedPort,
|
translations.freedPort,
|
||||||
severity: InfoBarSeverity.success,
|
severity: InfoBarSeverity.success,
|
||||||
duration: infoBarShortDuration
|
duration: infoBarShortDuration
|
||||||
);
|
);
|
||||||
case ServerResultType.freePortError:
|
case ServerResultType.freePortError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.freePortError(event.error ?? translations.unknownError),
|
translations.freePortError(event.error ?? translations.unknownError),
|
||||||
severity: InfoBarSeverity.error,
|
severity: InfoBarSeverity.error,
|
||||||
duration: infoBarLongDuration
|
duration: infoBarLongDuration
|
||||||
);
|
);
|
||||||
case ServerResultType.pingingRemote:
|
case ServerResultType.pingingRemote:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.pingingServer(ServerType.remote.name),
|
translations.pingingServer(ServerType.remote.name),
|
||||||
severity: InfoBarSeverity.info,
|
severity: InfoBarSeverity.info,
|
||||||
loading: true,
|
loading: true,
|
||||||
duration: null
|
duration: null
|
||||||
);
|
);
|
||||||
case ServerResultType.pingingLocal:
|
case ServerResultType.pingingLocal:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.pingingServer(type.value.name),
|
translations.pingingServer(type.value.name),
|
||||||
severity: InfoBarSeverity.info,
|
severity: InfoBarSeverity.info,
|
||||||
loading: true,
|
loading: true,
|
||||||
duration: null
|
duration: null
|
||||||
);
|
);
|
||||||
case ServerResultType.pingError:
|
case ServerResultType.pingError:
|
||||||
return showRebootInfoBar(
|
return _showRebootInfoBar(
|
||||||
translations.pingError(type.value.name),
|
translations.pingError(type.value.name),
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
);
|
);
|
||||||
case ServerResultType.processError:
|
|
||||||
return showRebootInfoBar(
|
|
||||||
translations.backendProcessError,
|
|
||||||
severity: InfoBarSeverity.error
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> joinServerInteractive(String uuid, FortniteServer server) async {
|
Future<void> joinServerInteractive(String uuid, FortniteServer server) async {
|
||||||
if(!kDebugMode && uuid == server.id) {
|
if(!kDebugMode && uuid == server.id) {
|
||||||
showRebootInfoBar(
|
_showRebootInfoBar(
|
||||||
translations.joinSelfServer,
|
translations.joinSelfServer,
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
@@ -147,7 +164,7 @@ extension ServerControllerDialog on BackendController {
|
|||||||
final gameController = Get.find<GameController>();
|
final gameController = Get.find<GameController>();
|
||||||
final version = gameController.getVersionByName(server.version.toString());
|
final version = gameController.getVersionByName(server.version.toString());
|
||||||
if(version == null) {
|
if(version == null) {
|
||||||
showRebootInfoBar(
|
_showRebootInfoBar(
|
||||||
translations.cannotJoinServerVersion(server.version.toString()),
|
translations.cannotJoinServerVersion(server.version.toString()),
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
@@ -176,7 +193,7 @@ extension ServerControllerDialog on BackendController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!checkPassword(confirmPassword, hashedPassword)) {
|
if(!checkPassword(confirmPassword, hashedPassword)) {
|
||||||
showRebootInfoBar(
|
_showRebootInfoBar(
|
||||||
translations.wrongServerPassword,
|
translations.wrongServerPassword,
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
@@ -199,7 +216,7 @@ extension ServerControllerDialog on BackendController {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
showRebootInfoBar(
|
_showRebootInfoBar(
|
||||||
translations.offlineServer,
|
translations.offlineServer,
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
severity: InfoBarSeverity.error
|
severity: InfoBarSeverity.error
|
||||||
@@ -268,10 +285,29 @@ extension ServerControllerDialog on BackendController {
|
|||||||
FlutterClipboard.controlC(decryptedIp);
|
FlutterClipboard.controlC(decryptedIp);
|
||||||
}
|
}
|
||||||
controller.selectedVersion = version;
|
controller.selectedVersion = version;
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) => showRebootInfoBar(
|
WidgetsBinding.instance.addPostFrameCallback((_) => _showRebootInfoBar(
|
||||||
embedded ? translations.joinedServer(author) : translations.copiedIp,
|
embedded ? translations.joinedServer(author) : translations.copiedIp,
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
severity: InfoBarSeverity.success
|
severity: InfoBarSeverity.success
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InfoBarEntry _showRebootInfoBar(dynamic text, {
|
||||||
|
InfoBarSeverity severity = InfoBarSeverity.info,
|
||||||
|
bool loading = false,
|
||||||
|
Duration? duration = infoBarShortDuration,
|
||||||
|
void Function()? onDismissed,
|
||||||
|
Widget? action
|
||||||
|
}) {
|
||||||
|
final result = showRebootInfoBar(
|
||||||
|
text,
|
||||||
|
severity: severity,
|
||||||
|
loading: loading,
|
||||||
|
duration: duration,
|
||||||
|
onDismissed: onDismissed,
|
||||||
|
action: action
|
||||||
|
);
|
||||||
|
_infoBars.add(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,6 @@ import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
|||||||
import 'package:reboot_launcher/src/messenger/abstract/dialog.dart';
|
import 'package:reboot_launcher/src/messenger/abstract/dialog.dart';
|
||||||
import 'package:reboot_launcher/src/messenger/abstract/info_bar.dart';
|
import 'package:reboot_launcher/src/messenger/abstract/info_bar.dart';
|
||||||
import 'package:reboot_launcher/src/messenger/implementation/server.dart';
|
import 'package:reboot_launcher/src/messenger/implementation/server.dart';
|
||||||
import 'package:reboot_launcher/src/page/abstract/page_type.dart';
|
|
||||||
import 'package:reboot_launcher/src/page/pages.dart';
|
import 'package:reboot_launcher/src/page/pages.dart';
|
||||||
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
||||||
import 'package:reboot_launcher/src/util/os.dart';
|
import 'package:reboot_launcher/src/util/os.dart';
|
||||||
@@ -502,6 +501,7 @@ class _LaunchButtonState extends State<LaunchButton> {
|
|||||||
if(host == null) {
|
if(host == null) {
|
||||||
await _operation?.cancel();
|
await _operation?.cancel();
|
||||||
_operation = null;
|
_operation = null;
|
||||||
|
_backendController.cancelInteractive();
|
||||||
}
|
}
|
||||||
|
|
||||||
host = host ?? widget.host;
|
host = host ?? widget.host;
|
||||||
@@ -584,6 +584,10 @@ class _LaunchButtonState extends State<LaunchButton> {
|
|||||||
translations.corruptedVersionError,
|
translations.corruptedVersionError,
|
||||||
severity: InfoBarSeverity.error,
|
severity: InfoBarSeverity.error,
|
||||||
duration: infoBarLongDuration,
|
duration: infoBarLongDuration,
|
||||||
|
action: Button(
|
||||||
|
onPressed: () => launchUrl(launcherLogFile.uri),
|
||||||
|
child: Text(translations.openLog),
|
||||||
|
)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case _StopReason.corruptedDllError:
|
case _StopReason.corruptedDllError:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: reboot_launcher
|
name: reboot_launcher
|
||||||
description: Graphical User Interface for Project Reboot
|
description: Graphical User Interface for Project Reboot
|
||||||
version: "9.2.0"
|
version: "9.2.2"
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,3 @@
|
|||||||
#define public Dependency_Path_NetCoreCheck "..\..\dependencies\InnoDependencyInstaller\"
|
|
||||||
|
|
||||||
#include "..\..\dependencies\InnoDependencyInstaller\CodeDependencies.iss"
|
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
AppId={{APP_ID}}
|
AppId={{APP_ID}}
|
||||||
AppVersion={{APP_VERSION}}
|
AppVersion={{APP_VERSION}}
|
||||||
@@ -20,10 +16,14 @@ PrivilegesRequired=admin
|
|||||||
ArchitecturesAllowed=x64
|
ArchitecturesAllowed=x64
|
||||||
ArchitecturesInstallIn64BitMode=x64
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
ChangesEnvironment=yes
|
ChangesEnvironment=yes
|
||||||
|
SetupLogging=yes
|
||||||
|
|
||||||
[Languages]
|
[Languages]
|
||||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||||
|
|
||||||
|
[CustomMessages]
|
||||||
|
InstallingVC2017redist=Installing Visual C++ Redistributable
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkedonce
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkedonce
|
||||||
Name: "launchAtStartup"; Description: "{cm:AutoStartProgram,{{DISPLAY_NAME}}}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
Name: "launchAtStartup"; Description: "{cm:AutoStartProgram,{{DISPLAY_NAME}}}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||||
@@ -33,10 +33,12 @@ Name: "{app}"; Permissions: everyone-full
|
|||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "{{SOURCE_DIR}}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full
|
Source: "{{SOURCE_DIR}}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full
|
||||||
|
Source: "..\..\dependencies\redist\VC_redist.x64.exe"; DestDir: {tmp}; Flags: dontcopy
|
||||||
|
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -Command ""Add-MpPreference -ExclusionPath '{app}'"""; Flags: runhidden
|
Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -Command ""Add-MpPreference -ExclusionPath '{app}'"""; Flags: runhidden
|
||||||
Filename: "{app}\{{EXECUTABLE_NAME}}"; Description: "{cm:LaunchProgram,{{DISPLAY_NAME}}}"; Flags: runascurrentuser nowait postinstall skipifsilent
|
Filename: "{app}\{{EXECUTABLE_NAME}}"; Description: "{cm:LaunchProgram,{{DISPLAY_NAME}}}"; Flags: runascurrentuser nowait postinstall skipifsilent
|
||||||
|
Filename: "{tmp}\VC_redist.x64.exe"; StatusMsg: "{cm:InstallingVC2017redist}"; Parameters: "/quiet"; Check: VC2017RedistNeedsInstall; Flags: waituntilterminated
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{autoprograms}\{{DISPLAY_NAME}}"; Filename: "{app}\{{EXECUTABLE_NAME}}"
|
Name: "{autoprograms}\{{DISPLAY_NAME}}"; Filename: "{app}\{{EXECUTABLE_NAME}}"
|
||||||
@@ -44,13 +46,43 @@ Name: "{autodesktop}\{{DISPLAY_NAME}}"; Filename: "{app}\{{EXECUTABLE_NAME}}"; T
|
|||||||
Name: "{userstartup}\{{DISPLAY_NAME}}"; Filename: "{app}\{{EXECUTABLE_NAME}}"; WorkingDir: "{app}"; Tasks: launchAtStartup
|
Name: "{userstartup}\{{DISPLAY_NAME}}"; Filename: "{app}\{{EXECUTABLE_NAME}}"; WorkingDir: "{app}"; Tasks: launchAtStartup
|
||||||
|
|
||||||
[Code]
|
[Code]
|
||||||
function InitializeSetup: Boolean;
|
function CompareVersion(version1, version2: String): Integer;
|
||||||
|
var
|
||||||
|
packVersion1, packVersion2: Int64;
|
||||||
|
begin
|
||||||
|
if not StrToVersion(version1, packVersion1) then packVersion1 := 0;
|
||||||
|
if not StrToVersion(version2, packVersion2) then packVersion2 := 0;
|
||||||
|
Result := ComparePackedVersion(packVersion1, packVersion2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function BoolToStr(Value: Boolean): String;
|
||||||
|
begin
|
||||||
|
if Value then
|
||||||
|
Result := 'Yes'
|
||||||
|
else
|
||||||
|
Result := 'No';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function VC2017RedistNeedsInstall: Boolean;
|
||||||
|
var
|
||||||
|
Version: String;
|
||||||
|
begin
|
||||||
|
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Version', Version) then
|
||||||
|
begin
|
||||||
|
Result := (CompareVersion(Copy(Version, 2, Length(Version)), '14.40.33810.00') < 0);
|
||||||
|
end
|
||||||
|
else
|
||||||
begin
|
begin
|
||||||
Dependency_AddVC2015To2022
|
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
Log('Visual C++ Redistributable version: ' + Version);
|
||||||
|
Log('Needs installation? ' + BoolToStr(Result));
|
||||||
|
if (Result) then
|
||||||
|
begin
|
||||||
|
ExtractTemporaryFile('VC_redist.x64.exe');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
[Registry]
|
[Registry]
|
||||||
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName: "OPENSSL_ia32cap"; \
|
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName: "OPENSSL_ia32cap"; ValueData: "~0x20000000"; Flags: preservestringtype
|
||||||
ValueData: "~0x20000000"; Flags: preservestringtype
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user