mirror of
https://github.com/Stremio/stremio-shell-ng.git
synced 2026-04-19 22:22:03 +00:00
Scripts for inno setup installer
This commit is contained in:
parent
a4039885c1
commit
ef461f0440
9 changed files with 1147 additions and 1 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -1 +1,3 @@
|
|||
/target
|
||||
/target
|
||||
/bin
|
||||
/stremio*.exe
|
||||
BIN
images/stremio_gray.ico
Normal file
BIN
images/stremio_gray.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
BIN
images/windows-installer-header.bmp
Normal file
BIN
images/windows-installer-header.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
images/windows-installer.bmp
Normal file
BIN
images/windows-installer.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 151 KiB |
807
setup/CodeDependencies.iss
Normal file
807
setup/CodeDependencies.iss
Normal file
|
|
@ -0,0 +1,807 @@
|
|||
; -- CodeDependencies.iss --
|
||||
;
|
||||
; This script shows how to download and install any dependency such as .NET,
|
||||
; Visual C++ or SQL Server during your application's installation process.
|
||||
;
|
||||
; contribute: https://github.com/DomGries/InnoDependencyInstaller
|
||||
|
||||
|
||||
; -----------
|
||||
; SHARED CODE
|
||||
; -----------
|
||||
[Code]
|
||||
// types and variables
|
||||
type
|
||||
TDependency_Entry = record
|
||||
Filename: String;
|
||||
Parameters: String;
|
||||
Title: String;
|
||||
URL: String;
|
||||
Checksum: String;
|
||||
ForceSuccess: Boolean;
|
||||
RestartAfter: Boolean;
|
||||
end;
|
||||
|
||||
var
|
||||
Dependency_Memo: String;
|
||||
Dependency_List: array of TDependency_Entry;
|
||||
Dependency_NeedRestart, Dependency_ForceX86: Boolean;
|
||||
Dependency_DownloadPage: TDownloadWizardPage;
|
||||
|
||||
procedure Dependency_Add(const Filename, Parameters, Title, URL, Checksum: String; const ForceSuccess, RestartAfter: Boolean);
|
||||
var
|
||||
Dependency: TDependency_Entry;
|
||||
DependencyCount: Integer;
|
||||
begin
|
||||
Dependency_Memo := Dependency_Memo + #13#10 + '%1' + Title;
|
||||
|
||||
Dependency.Filename := Filename;
|
||||
Dependency.Parameters := Parameters;
|
||||
Dependency.Title := Title;
|
||||
|
||||
if FileExists(ExpandConstant('{tmp}{\}') + Filename) then begin
|
||||
Dependency.URL := '';
|
||||
end else begin
|
||||
Dependency.URL := URL;
|
||||
end;
|
||||
|
||||
Dependency.Checksum := Checksum;
|
||||
Dependency.ForceSuccess := ForceSuccess;
|
||||
Dependency.RestartAfter := RestartAfter;
|
||||
|
||||
DependencyCount := GetArrayLength(Dependency_List);
|
||||
SetArrayLength(Dependency_List, DependencyCount + 1);
|
||||
Dependency_List[DependencyCount] := Dependency;
|
||||
end;
|
||||
|
||||
<event('InitializeWizard')>
|
||||
procedure Dependency_Internal1;
|
||||
begin
|
||||
Dependency_DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil);
|
||||
end;
|
||||
|
||||
<event('PrepareToInstall')>
|
||||
function Dependency_Internal2(var NeedsRestart: Boolean): String;
|
||||
var
|
||||
DependencyCount, DependencyIndex, ResultCode: Integer;
|
||||
Retry: Boolean;
|
||||
TempValue: String;
|
||||
begin
|
||||
DependencyCount := GetArrayLength(Dependency_List);
|
||||
|
||||
if DependencyCount > 0 then begin
|
||||
Dependency_DownloadPage.Show;
|
||||
|
||||
for DependencyIndex := 0 to DependencyCount - 1 do begin
|
||||
if Dependency_List[DependencyIndex].URL <> '' then begin
|
||||
Dependency_DownloadPage.Clear;
|
||||
Dependency_DownloadPage.Add(Dependency_List[DependencyIndex].URL, Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Checksum);
|
||||
|
||||
Retry := True;
|
||||
while Retry do begin
|
||||
Retry := False;
|
||||
|
||||
try
|
||||
Dependency_DownloadPage.Download;
|
||||
except
|
||||
if Dependency_DownloadPage.AbortedByUser then begin
|
||||
Result := Dependency_List[DependencyIndex].Title;
|
||||
DependencyIndex := DependencyCount;
|
||||
end else begin
|
||||
case SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of
|
||||
IDABORT: begin
|
||||
Result := Dependency_List[DependencyIndex].Title;
|
||||
DependencyIndex := DependencyCount;
|
||||
end;
|
||||
IDRETRY: begin
|
||||
Retry := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if Result = '' then begin
|
||||
for DependencyIndex := 0 to DependencyCount - 1 do begin
|
||||
Dependency_DownloadPage.SetText(Dependency_List[DependencyIndex].Title, '');
|
||||
Dependency_DownloadPage.SetProgress(DependencyIndex + 1, DependencyCount + 1);
|
||||
|
||||
while True do begin
|
||||
ResultCode := 0;
|
||||
if ShellExec('', ExpandConstant('{tmp}{\}') + Dependency_List[DependencyIndex].Filename, Dependency_List[DependencyIndex].Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then begin
|
||||
if Dependency_List[DependencyIndex].RestartAfter then begin
|
||||
if DependencyIndex = DependencyCount - 1 then begin
|
||||
Dependency_NeedRestart := True;
|
||||
end else begin
|
||||
NeedsRestart := True;
|
||||
Result := Dependency_List[DependencyIndex].Title;
|
||||
end;
|
||||
break;
|
||||
end else if (ResultCode = 0) or Dependency_List[DependencyIndex].ForceSuccess then begin // ERROR_SUCCESS (0)
|
||||
break;
|
||||
end else if ResultCode = 1641 then begin // ERROR_SUCCESS_REBOOT_INITIATED (1641)
|
||||
NeedsRestart := True;
|
||||
Result := Dependency_List[DependencyIndex].Title;
|
||||
break;
|
||||
end else if ResultCode = 3010 then begin // ERROR_SUCCESS_REBOOT_REQUIRED (3010)
|
||||
Dependency_NeedRestart := True;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
|
||||
case SuppressibleMsgBox(FmtMessage(SetupMessage(msgErrorFunctionFailed), [Dependency_List[DependencyIndex].Title, IntToStr(ResultCode)]), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of
|
||||
IDABORT: begin
|
||||
Result := Dependency_List[DependencyIndex].Title;
|
||||
break;
|
||||
end;
|
||||
IDIGNORE: begin
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if Result <> '' then begin
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
|
||||
if NeedsRestart then begin
|
||||
TempValue := '"' + ExpandConstant('{srcexe}') + '" /restart=1 /LANG="' + ExpandConstant('{language}') + '" /DIR="' + WizardDirValue + '" /GROUP="' + WizardGroupValue + '" /TYPE="' + WizardSetupType(False) + '" /COMPONENTS="' + WizardSelectedComponents(False) + '" /TASKS="' + WizardSelectedTasks(False) + '"';
|
||||
if WizardNoIcons then begin
|
||||
TempValue := TempValue + ' /NOICONS';
|
||||
end;
|
||||
RegWriteStringValue(HKA, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', '{#SetupSetting("AppName")}', TempValue);
|
||||
end;
|
||||
end;
|
||||
|
||||
Dependency_DownloadPage.Hide;
|
||||
end;
|
||||
end;
|
||||
|
||||
<event('UpdateReadyMemo')>
|
||||
function Dependency_Internal3(const Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
|
||||
begin
|
||||
Result := '';
|
||||
if MemoUserInfoInfo <> '' then begin
|
||||
Result := Result + MemoUserInfoInfo + Newline + NewLine;
|
||||
end;
|
||||
if MemoDirInfo <> '' then begin
|
||||
Result := Result + MemoDirInfo + Newline + NewLine;
|
||||
end;
|
||||
if MemoTypeInfo <> '' then begin
|
||||
Result := Result + MemoTypeInfo + Newline + NewLine;
|
||||
end;
|
||||
if MemoComponentsInfo <> '' then begin
|
||||
Result := Result + MemoComponentsInfo + Newline + NewLine;
|
||||
end;
|
||||
if MemoGroupInfo <> '' then begin
|
||||
Result := Result + MemoGroupInfo + Newline + NewLine;
|
||||
end;
|
||||
if MemoTasksInfo <> '' then begin
|
||||
Result := Result + MemoTasksInfo;
|
||||
end;
|
||||
|
||||
if Dependency_Memo <> '' then begin
|
||||
if MemoTasksInfo = '' then begin
|
||||
Result := Result + SetupMessage(msgReadyMemoTasks);
|
||||
end;
|
||||
Result := Result + FmtMessage(Dependency_Memo, [Space]);
|
||||
end;
|
||||
end;
|
||||
|
||||
<event('NeedRestart')>
|
||||
function Dependency_Internal4: Boolean;
|
||||
begin
|
||||
Result := Dependency_NeedRestart;
|
||||
end;
|
||||
|
||||
function Dependency_IsX64: Boolean;
|
||||
begin
|
||||
Result := not Dependency_ForceX86 and Is64BitInstallMode;
|
||||
end;
|
||||
|
||||
function Dependency_String(const x86, x64: String): String;
|
||||
begin
|
||||
if Dependency_IsX64 then begin
|
||||
Result := x64;
|
||||
end else begin
|
||||
Result := x86;
|
||||
end;
|
||||
end;
|
||||
|
||||
function Dependency_ArchSuffix: String;
|
||||
begin
|
||||
Result := Dependency_String('', '_x64');
|
||||
end;
|
||||
|
||||
function Dependency_ArchTitle: String;
|
||||
begin
|
||||
Result := Dependency_String(' (x86)', ' (x64)');
|
||||
end;
|
||||
|
||||
function Dependency_IsNetCoreInstalled(const Version: String): Boolean;
|
||||
var
|
||||
ResultCode: Integer;
|
||||
begin
|
||||
// source code: https://github.com/dotnet/deployment-tools/tree/master/src/clickonce/native/projects/NetCoreCheck
|
||||
if not FileExists(ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe') then begin
|
||||
ExtractTemporaryFile('netcorecheck' + Dependency_ArchSuffix + '.exe');
|
||||
end;
|
||||
Result := ShellExec('', ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe', Version, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0);
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet35;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net35-sp1
|
||||
if not IsDotNetInstalled(net35, 1) then begin
|
||||
Dependency_Add('dotnetfx35.exe',
|
||||
'/lang:enu /passive /norestart',
|
||||
'.NET Framework 3.5 Service Pack 1',
|
||||
'https://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet40;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net40
|
||||
if not IsDotNetInstalled(net4full, 0) then begin
|
||||
Dependency_Add('dotNetFx40_Full_setup.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Framework 4.0',
|
||||
'https://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet45;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net452
|
||||
if not IsDotNetInstalled(net452, 0) then begin
|
||||
Dependency_Add('dotnetfx45.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Framework 4.5.2',
|
||||
'https://go.microsoft.com/fwlink/?LinkId=397707',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet46;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net462
|
||||
if not IsDotNetInstalled(net462, 0) then begin
|
||||
Dependency_Add('dotnetfx46.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Framework 4.6.2',
|
||||
'https://go.microsoft.com/fwlink/?linkid=780596',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet47;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net472
|
||||
if not IsDotNetInstalled(net472, 0) then begin
|
||||
Dependency_Add('dotnetfx47.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Framework 4.7.2',
|
||||
'https://go.microsoft.com/fwlink/?LinkId=863262',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet48;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-framework/net48
|
||||
if not IsDotNetInstalled(net48, 0) then begin
|
||||
Dependency_Add('dotnetfx48.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Framework 4.8',
|
||||
'https://go.microsoft.com/fwlink/?LinkId=2085155',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddNetCore31;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-core/3.1
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 3.1.22') then begin
|
||||
Dependency_Add('netcore31' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Core Runtime 3.1.22' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c2437aed-8cc4-41d0-a239-d6c7cf7bddae/062c37e8b06df740301c0bca1b0b7b9a/dotnet-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/4e95705e-1bb6-4764-b899-1b97eb70ea1d/dd311e073bd3e25b2efe2dcf02727e81/dotnet-runtime-3.1.22-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddNetCore31Asp;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-core/3.1
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 3.1.22') then begin
|
||||
Dependency_Add('netcore31asp' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'ASP.NET Core Runtime 3.1.22' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/0a1a2ee5-b8ed-4f0d-a4af-a7bce9a9ac2b/d452039b49d79e8897f272c3ab34b875/aspnetcore-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/80e52143-31e8-450e-aa94-b3f8484aaba9/4b69e5c77d50e7b367960a0079c90a99/aspnetcore-runtime-3.1.22-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddNetCore31Desktop;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet-core/3.1
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 3.1.22') then begin
|
||||
Dependency_Add('netcore31desktop' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Desktop Runtime 3.1.22' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/e4fcd574-4487-4b4b-8ca8-c23177c6f59f/c6d67a04956169dc21895cdcb42bf344/windowsdesktop-runtime-3.1.22-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/1c14e24b-7f31-42dc-ba3c-83295a2d6f7e/41b93591162dfe556cc160ae44fbe75e/windowsdesktop-runtime-3.1.22-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet50;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/5.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 5.0.13') then begin
|
||||
Dependency_Add('dotnet50' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Runtime 5.0.13' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/4a79fcd5-d61b-4606-8496-68071c8099c6/2bf770ca40521e8c4563072592eadd06/dotnet-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/fccf43d2-3e62-4ede-b5a5-592a7ccded7b/6339f1fdfe3317df5b09adf65f0261ab/dotnet-runtime-5.0.13-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet50Asp;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/5.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 5.0.13') then begin
|
||||
Dependency_Add('dotnet50asp' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'ASP.NET Core Runtime 5.0.13' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/340f9482-fc43-4ef7-b434-e2ed57f55cb3/c641b805cef3823769409a6dbac5746b/aspnetcore-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/aac560f3-eac8-437e-aebd-9830119deb10/6a3880161cf527e4ec71f67efe4d91ad/aspnetcore-runtime-5.0.13-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet50Desktop;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/5.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 5.0.13') then begin
|
||||
Dependency_Add('dotnet50desktop' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Desktop Runtime 5.0.13' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/c8125c6b-d399-4be3-b201-8f1394fc3b25/724758f754fc7b67daba74db8d6d91d9/windowsdesktop-runtime-5.0.13-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/2bfb80f2-b8f2-44b0-90c1-d3c8c1c8eac8/409dd3d3367feeeda048f4ff34b32e82/windowsdesktop-runtime-5.0.13-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet60;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/6.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.NETCore.App 6.0.8') then begin
|
||||
Dependency_Add('dotnet60' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Runtime 6.0.8' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/db70cd1d-4f33-4dc4-8293-57bb362175c7/5c27048a0fc814e58bc196666a9b0c61/dotnet-runtime-6.0.8-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/5af3de9d-1e5f-48ff-bfb7-f93c0957ffae/e8dd664b0439f4725f8c968e7aae7dd1/dotnet-runtime-6.0.8-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet60Asp;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/6.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.AspNetCore.App 6.0.8') then begin
|
||||
Dependency_Add('dotnet60asp' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'ASP.NET Core Runtime 6.0.8' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/26dd0df5-f2ef-4b47-8651-84a2496dd017/158f3a45dd0718fc3ceda10b56b22721/aspnetcore-runtime-6.0.8-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/f5ef50c0-4dd1-4301-857f-768834d5a006/852c6470e4e5f602eee280c1e4e4e4c3/aspnetcore-runtime-6.0.8-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDotNet60Desktop;
|
||||
begin
|
||||
// https://dotnet.microsoft.com/download/dotnet/6.0
|
||||
if not Dependency_IsNetCoreInstalled('Microsoft.WindowsDesktop.App 6.0.8') then begin
|
||||
Dependency_Add('dotnet60desktop' + Dependency_ArchSuffix + '.exe',
|
||||
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
|
||||
'.NET Desktop Runtime 6.0.8' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/61747fc6-7236-4d5e-85e5-a5df5f480f3a/02203594bf1331f0875aa6491419ffa1/windowsdesktop-runtime-6.0.8-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/b4a17a47-2fe8-498d-b817-30ad2e23f413/00020402af25ba40990c6cc3db5cb270/windowsdesktop-runtime-6.0.8-win-x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2005;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=26347
|
||||
if not IsMsiProductInstalled(Dependency_String('{86C9D5AA-F00C-4921-B3F2-C60AF92E2844}', '{A8D19029-8E5C-4E22-8011-48070F9E796E}'), PackVersionComponents(8, 0, 61000, 0)) then begin
|
||||
Dependency_Add('vcredist2005' + Dependency_ArchSuffix + '.exe',
|
||||
'/q',
|
||||
'Visual C++ 2005 Service Pack 1 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE', 'https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2008;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=26368
|
||||
if not IsMsiProductInstalled(Dependency_String('{DE2C306F-A067-38EF-B86C-03DE4B0312F9}', '{FDA45DDF-8E17-336F-A3ED-356B7B7C688A}'), PackVersionComponents(9, 0, 30729, 6161)) then begin
|
||||
Dependency_Add('vcredist2008' + Dependency_ArchSuffix + '.exe',
|
||||
'/q',
|
||||
'Visual C++ 2008 Service Pack 1 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe', 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2010;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=26999
|
||||
if not IsMsiProductInstalled(Dependency_String('{1F4F1D2A-D9DA-32CF-9909-48485DA06DD5}', '{5B75F761-BAC8-33BC-A381-464DDDD813A3}'), PackVersionComponents(10, 0, 40219, 0)) then begin
|
||||
Dependency_Add('vcredist2010' + Dependency_ArchSuffix + '.exe',
|
||||
'/passive /norestart',
|
||||
'Visual C++ 2010 Service Pack 1 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe', 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2012;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=30679
|
||||
if not IsMsiProductInstalled(Dependency_String('{4121ED58-4BD9-3E7B-A8B5-9F8BAAE045B7}', '{EFA6AFA1-738E-3E00-8101-FD03B86B29D1}'), PackVersionComponents(11, 0, 61030, 0)) then begin
|
||||
Dependency_Add('vcredist2012' + Dependency_ArchSuffix + '.exe',
|
||||
'/passive /norestart',
|
||||
'Visual C++ 2012 Update 4 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe', 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2013;
|
||||
begin
|
||||
// https://support.microsoft.com/en-us/help/4032938
|
||||
if not IsMsiProductInstalled(Dependency_String('{B59F5BF1-67C8-3802-8E59-2CE551A39FC5}', '{20400CF0-DE7C-327E-9AE4-F0F38D9085F8}'), PackVersionComponents(12, 0, 40664, 0)) then begin
|
||||
Dependency_Add('vcredist2013' + Dependency_ArchSuffix + '.exe',
|
||||
'/passive /norestart',
|
||||
'Visual C++ 2013 Update 5 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/10912113/5da66ddebb0ad32ebd4b922fd82e8e25/vcredist_x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/10912041/cee5d6bca2ddbcd039da727bf4acb48a/vcredist_x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddVC2015To2022;
|
||||
begin
|
||||
// https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
|
||||
if not IsMsiProductInstalled(Dependency_String('{65E5BD06-6392-3027-8C26-853107D3CF1A}', '{36F68A90-239C-34DF-B58C-64B30153CE35}'), PackVersionComponents(14, 30, 30704, 0)) then begin
|
||||
Dependency_Add('vcredist2022' + Dependency_ArchSuffix + '.exe',
|
||||
'/passive /norestart',
|
||||
'Visual C++ 2015-2022 Redistributable' + Dependency_ArchTitle,
|
||||
Dependency_String('https://aka.ms/vs/17/release/vc_redist.x86.exe', 'https://aka.ms/vs/17/release/vc_redist.x64.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddDirectX;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=35
|
||||
Dependency_Add('dxwebsetup.exe',
|
||||
'/q',
|
||||
'DirectX Runtime',
|
||||
'https://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe',
|
||||
'', True, False);
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2008Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=30438
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(10, 50, 4000, 0)) < 0) then begin
|
||||
Dependency_Add('sql2008express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2008 R2 Service Pack 2 Express',
|
||||
Dependency_String('https://download.microsoft.com/download/0/4/B/04BE03CD-EAF3-4797-9D8D-2E08E316C998/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/0/4/B/04BE03CD-EAF3-4797-9D8D-2E08E316C998/SQLEXPR_x64_ENU.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2012Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=56042
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(11, 0, 7001, 0)) < 0) then begin
|
||||
Dependency_Add('sql2012express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2012 Service Pack 4 Express',
|
||||
Dependency_String('https://download.microsoft.com/download/B/D/E/BDE8FAD6-33E5-44F6-B714-348F73E602B6/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/B/D/E/BDE8FAD6-33E5-44F6-B714-348F73E602B6/SQLEXPR_x64_ENU.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2014Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=57473
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(12, 0, 6024, 0)) < 0) then begin
|
||||
Dependency_Add('sql2014express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2014 Service Pack 3 Express',
|
||||
Dependency_String('https://download.microsoft.com/download/3/9/F/39F968FA-DEBB-4960-8F9E-0E7BB3035959/SQLEXPR32_x86_ENU.exe', 'https://download.microsoft.com/download/3/9/F/39F968FA-DEBB-4960-8F9E-0E7BB3035959/SQLEXPR_x64_ENU.exe'),
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2016Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=56840
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(13, 0, 5026, 0)) < 0) then begin
|
||||
Dependency_Add('sql2016express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2016 Service Pack 2 Express',
|
||||
'https://download.microsoft.com/download/3/7/6/3767D272-76A1-4F31-8849-260BD37924E4/SQLServer2016-SSEI-Expr.exe',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2017Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=55994
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(14, 0, 0, 0)) < 0) then begin
|
||||
Dependency_Add('sql2017express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2017 Express',
|
||||
'https://download.microsoft.com/download/5/E/9/5E9B18CC-8FD5-467E-B5BF-BADE39C51F73/SQLServer2017-SSEI-Expr.exe',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddSql2019Express;
|
||||
var
|
||||
Version: String;
|
||||
PackedVersion: Int64;
|
||||
begin
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=101064
|
||||
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(15, 0, 0, 0)) < 0) then begin
|
||||
Dependency_Add('sql2019express' + Dependency_ArchSuffix + '.exe',
|
||||
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
|
||||
'SQL Server 2019 Express',
|
||||
'https://download.microsoft.com/download/7/f/8/7f8a9c43-8c8a-4f7c-9f92-83c18d96b681/SQL2019-SSEI-Expr.exe',
|
||||
'', False, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Dependency_AddWebView2;
|
||||
begin
|
||||
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;
|
||||
|
||||
|
||||
[Setup]
|
||||
; -------------
|
||||
; EXAMPLE SETUP
|
||||
; -------------
|
||||
#ifndef Dependency_NoExampleSetup
|
||||
|
||||
; comment out dependency defines to disable installing them
|
||||
#define UseDotNet35
|
||||
#define UseDotNet40
|
||||
#define UseDotNet45
|
||||
#define UseDotNet46
|
||||
#define UseDotNet47
|
||||
#define UseDotNet48
|
||||
|
||||
; requires netcorecheck.exe and netcorecheck_x64.exe (see download link below)
|
||||
#define UseNetCoreCheck
|
||||
#ifdef UseNetCoreCheck
|
||||
#define UseNetCore31
|
||||
#define UseNetCore31Asp
|
||||
#define UseNetCore31Desktop
|
||||
#define UseDotNet50
|
||||
#define UseDotNet50Asp
|
||||
#define UseDotNet50Desktop
|
||||
#define UseDotNet60
|
||||
#define UseDotNet60Asp
|
||||
#define UseDotNet60Desktop
|
||||
#endif
|
||||
|
||||
#define UseVC2005
|
||||
#define UseVC2008
|
||||
#define UseVC2010
|
||||
#define UseVC2012
|
||||
#define UseVC2013
|
||||
#define UseVC2015To2022
|
||||
|
||||
; requires dxwebsetup.exe (see download link below)
|
||||
;#define UseDirectX
|
||||
|
||||
#define UseSql2008Express
|
||||
#define UseSql2012Express
|
||||
#define UseSql2014Express
|
||||
#define UseSql2016Express
|
||||
#define UseSql2017Express
|
||||
#define UseSql2019Express
|
||||
|
||||
#define UseWebView2
|
||||
|
||||
#define MyAppSetupName 'MyProgram'
|
||||
#define MyAppVersion '1.0'
|
||||
#define MyAppPublisher 'Inno Setup'
|
||||
#define MyAppCopyright 'Copyright © Inno Setup'
|
||||
#define MyAppURL 'https://jrsoftware.org/isinfo.php'
|
||||
|
||||
AppName={#MyAppSetupName}
|
||||
AppVersion={#MyAppVersion}
|
||||
AppVerName={#MyAppSetupName} {#MyAppVersion}
|
||||
AppCopyright={#MyAppCopyright}
|
||||
VersionInfoVersion={#MyAppVersion}
|
||||
VersionInfoCompany={#MyAppPublisher}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
OutputBaseFilename={#MyAppSetupName}-{#MyAppVersion}
|
||||
DefaultGroupName={#MyAppSetupName}
|
||||
DefaultDirName={autopf}\{#MyAppSetupName}
|
||||
UninstallDisplayIcon={app}\MyProgram.exe
|
||||
SourceDir=src
|
||||
OutputDir={#SourcePath}\bin
|
||||
AllowNoIcons=yes
|
||||
PrivilegesRequired=admin
|
||||
|
||||
; remove next line if you only deploy 32-bit binaries and dependencies
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
|
||||
[Languages]
|
||||
Name: en; MessagesFile: "compiler:Default.isl"
|
||||
Name: nl; MessagesFile: "compiler:Languages\Dutch.isl"
|
||||
Name: de; MessagesFile: "compiler:Languages\German.isl"
|
||||
|
||||
[Files]
|
||||
#ifdef UseNetCoreCheck
|
||||
; download netcorecheck.exe: https://go.microsoft.com/fwlink/?linkid=2135256
|
||||
; download netcorecheck_x64.exe: https://go.microsoft.com/fwlink/?linkid=2135504
|
||||
Source: "netcorecheck.exe"; Flags: dontcopy noencryption
|
||||
Source: "netcorecheck_x64.exe"; Flags: dontcopy noencryption
|
||||
#endif
|
||||
|
||||
#ifdef UseDirectX
|
||||
Source: "dxwebsetup.exe"; Flags: dontcopy noencryption
|
||||
#endif
|
||||
|
||||
Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Dependency_IsX64; Flags: ignoreversion
|
||||
Source: "MyProg.exe"; DestDir: "{app}"; Check: not Dependency_IsX64; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{#MyAppSetupName}"; Filename: "{app}\MyProg.exe"
|
||||
Name: "{group}\{cm:UninstallProgram,{#MyAppSetupName}}"; Filename: "{uninstallexe}"
|
||||
Name: "{commondesktop}\{#MyAppSetupName}"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,{#MyAppSetupName}}"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[Code]
|
||||
function InitializeSetup: Boolean;
|
||||
begin
|
||||
#ifdef UseDotNet35
|
||||
Dependency_AddDotNet35;
|
||||
#endif
|
||||
#ifdef UseDotNet40
|
||||
Dependency_AddDotNet40;
|
||||
#endif
|
||||
#ifdef UseDotNet45
|
||||
Dependency_AddDotNet45;
|
||||
#endif
|
||||
#ifdef UseDotNet46
|
||||
Dependency_AddDotNet46;
|
||||
#endif
|
||||
#ifdef UseDotNet47
|
||||
Dependency_AddDotNet47;
|
||||
#endif
|
||||
#ifdef UseDotNet48
|
||||
Dependency_AddDotNet48;
|
||||
#endif
|
||||
|
||||
#ifdef UseNetCore31
|
||||
Dependency_AddNetCore31;
|
||||
#endif
|
||||
#ifdef UseNetCore31Asp
|
||||
Dependency_AddNetCore31Asp;
|
||||
#endif
|
||||
#ifdef UseNetCore31Desktop
|
||||
Dependency_AddNetCore31Desktop;
|
||||
#endif
|
||||
#ifdef UseDotNet50
|
||||
Dependency_AddDotNet50;
|
||||
#endif
|
||||
#ifdef UseDotNet50Asp
|
||||
Dependency_AddDotNet50Asp;
|
||||
#endif
|
||||
#ifdef UseDotNet50Desktop
|
||||
Dependency_AddDotNet50Desktop;
|
||||
#endif
|
||||
#ifdef UseDotNet60
|
||||
Dependency_AddDotNet60;
|
||||
#endif
|
||||
#ifdef UseDotNet60Asp
|
||||
Dependency_AddDotNet60Asp;
|
||||
#endif
|
||||
#ifdef UseDotNet60Desktop
|
||||
Dependency_AddDotNet60Desktop;
|
||||
#endif
|
||||
|
||||
#ifdef UseVC2005
|
||||
Dependency_AddVC2005;
|
||||
#endif
|
||||
#ifdef UseVC2008
|
||||
Dependency_AddVC2008;
|
||||
#endif
|
||||
#ifdef UseVC2010
|
||||
Dependency_AddVC2010;
|
||||
#endif
|
||||
#ifdef UseVC2012
|
||||
Dependency_AddVC2012;
|
||||
#endif
|
||||
#ifdef UseVC2013
|
||||
//Dependency_ForceX86 := True; // force 32-bit install of next dependencies
|
||||
Dependency_AddVC2013;
|
||||
//Dependency_ForceX86 := False; // disable forced 32-bit install again
|
||||
#endif
|
||||
#ifdef UseVC2015To2022
|
||||
Dependency_AddVC2015To2022;
|
||||
#endif
|
||||
|
||||
#ifdef UseDirectX
|
||||
ExtractTemporaryFile('dxwebsetup.exe');
|
||||
Dependency_AddDirectX;
|
||||
#endif
|
||||
|
||||
#ifdef UseSql2008Express
|
||||
Dependency_AddSql2008Express;
|
||||
#endif
|
||||
#ifdef UseSql2012Express
|
||||
Dependency_AddSql2012Express;
|
||||
#endif
|
||||
#ifdef UseSql2014Express
|
||||
Dependency_AddSql2014Express;
|
||||
#endif
|
||||
#ifdef UseSql2016Express
|
||||
Dependency_AddSql2016Express;
|
||||
#endif
|
||||
#ifdef UseSql2017Express
|
||||
Dependency_AddSql2017Express;
|
||||
#endif
|
||||
#ifdef UseSql2019Express
|
||||
Dependency_AddSql2019Express;
|
||||
#endif
|
||||
|
||||
#ifdef UseWebView2
|
||||
Dependency_AddWebView2;
|
||||
#endif
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
#endif
|
||||
204
setup/Stremio.iss
Normal file
204
setup/Stremio.iss
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
; Script generated by the Inno Setup Script Wizard.
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
#define MyAppName "Stremio"
|
||||
#define MyAppVersion "5.0.0"
|
||||
#define MyAppPublisher "Smart Code OOD"
|
||||
#define MyAppURL "https://www.stremio.com/"
|
||||
#define MyAppGoodbyeURL "https://www.strem.io/goodbye"
|
||||
#define MyAppExeName "stremio-shell-ng.exe"
|
||||
#define AssocTorrentExt ".torrent"
|
||||
#define AssocTorrentKey StringChange(MyAppName, " ", "") + AssocTorrentExt
|
||||
#define AssocTorrentDesc "Bittorrent seed file"
|
||||
|
||||
#define public Dependency_NoExampleSetup
|
||||
#include "CodeDependencies.iss"
|
||||
|
||||
[Setup]
|
||||
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||
AppId={{DD3870DA-AF3C-4C73-B010-72944AB610C6}
|
||||
AppName={#MyAppName}
|
||||
AppVersion={#MyAppVersion}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
DefaultDirName={autopf}\{#MyAppName}
|
||||
SetupMutex=StremioShellNgSetupsMutex,Global\StremioShellNgSetupsMutex
|
||||
; Remove the following line to run in administrative install mode (install for all users.)
|
||||
PrivilegesRequired=lowest
|
||||
DisableReadyPage=yes
|
||||
DisableDirPage=yes
|
||||
DisableProgramGroupPage=yes
|
||||
; DisableFinishedPage=yes
|
||||
ChangesAssociations=yes
|
||||
OutputBaseFilename={#MyAppName} {#MyAppVersion}
|
||||
OutputDir=..
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
WizardStyle=modern
|
||||
LanguageDetectionMethod=uilanguage
|
||||
ShowLanguageDialog=auto
|
||||
CloseApplications=yes
|
||||
WizardImageFile={#SourcePath}..\images\windows-installer.bmp
|
||||
WizardSmallImageFile={#SourcePath}..\images\windows-installer-header.bmp
|
||||
SetupIconFile={#SourcePath}..\images\stremio.ico
|
||||
|
||||
[Code]
|
||||
function InitializeSetup: Boolean;
|
||||
begin
|
||||
Dependency_AddWebView2;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function ShouldSkipPage(PageID: Integer): Boolean;
|
||||
begin
|
||||
{ Hide finish page if run app is selected }
|
||||
if (PageID = wpFinished) and WizardIsTaskSelected('runapp') then
|
||||
Result := True
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
procedure CurPageChanged(CurPageID: Integer);
|
||||
begin
|
||||
case (CurPageID) of
|
||||
wpSelectTasks: WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
|
||||
wpFinished: WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish);
|
||||
else
|
||||
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
var
|
||||
ResultCode: Integer;
|
||||
begin
|
||||
if (CurStep = ssDone) and WizardIsTaskSelected('runapp') then
|
||||
ExecAsOriginalUser(ExpandConstant('{app}\{#MyAppExeName}'), '', '', SW_SHOW, ewNoWait, ResultCode);
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
var
|
||||
ErrorCode: Integer;
|
||||
begin
|
||||
case (CurUninstallStep) of
|
||||
usPostUninstall: if MsgBox(ExpandConstant('{cm:RemoveDataFolder}'), mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
|
||||
DelTree(ExpandConstant('{app}'), True, True, True);
|
||||
usDone: ShellExec('', ExpandConstant('{#MyAppGoodbyeURL}'), '', '', SW_SHOW, ewNoWait, ErrorCode);
|
||||
end;
|
||||
end;
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "armenian"; MessagesFile: "compiler:Languages\Armenian.isl"
|
||||
Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
|
||||
Name: "bulgarian"; MessagesFile: "compiler:Languages\Bulgarian.isl"
|
||||
Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
|
||||
Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl"
|
||||
Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
|
||||
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
|
||||
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
|
||||
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
|
||||
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
|
||||
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
|
||||
Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
|
||||
Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl"
|
||||
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
|
||||
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
|
||||
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
|
||||
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
|
||||
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
|
||||
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
|
||||
Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
|
||||
Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
|
||||
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
|
||||
Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl"
|
||||
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
|
||||
|
||||
[CustomMessages]
|
||||
RemoveDataFolder=Remove all data and configuration?
|
||||
english.RemoveDataFolder=Remove all data and configuration?
|
||||
armenian.RemoveDataFolder=Հեռացնե՞լ բոլոր տվյալները և կոնֆիգուրացիան:
|
||||
brazilianportuguese.RemoveDataFolder=Remover todos os dados e configuração?
|
||||
bulgarian.RemoveDataFolder=Премахване на всички данни и конфигурация?
|
||||
catalan.RemoveDataFolder=Vols suprimir totes les dades i la configuració?
|
||||
corsican.RemoveDataFolder=Eliminate tutti i dati è a cunfigurazione?
|
||||
czech.RemoveDataFolder=Odebrat všechna data a konfiguraci?
|
||||
danish.RemoveDataFolder=Remove all data and configuration?
|
||||
dutch.RemoveDataFolder=Remove all data and configuration?
|
||||
finnish.RemoveDataFolder=Poistetaanko kaikki tiedot ja asetukset?
|
||||
french.RemoveDataFolder=Supprimer toutes les données et la configuration ?
|
||||
german.RemoveDataFolder=Alle Daten und Konfiguration entfernen?
|
||||
hebrew.RemoveDataFolder=Remove all data and configuration?
|
||||
icelandic.RemoveDataFolder=Fjarlægja öll gögn og stillingar?
|
||||
italian.RemoveDataFolder=Rimuovere tutti i dati e la configurazione?
|
||||
japanese.RemoveDataFolder=すべてのデータと構成を削除しますか?
|
||||
norwegian.RemoveDataFolder=Vil du fjerne all data og konfigurasjon?
|
||||
polish.RemoveDataFolder=Usunąć wszystkie dane i konfigurację?
|
||||
portuguese.RemoveDataFolder=Remover todos os dados e configuração?
|
||||
russian.RemoveDataFolder=Удалить все данные и конфигурацию?
|
||||
slovak.RemoveDataFolder=Chcete odstrániť všetky údaje a konfiguráciu?
|
||||
slovenian.RemoveDataFolder=Želite odstraniti vse podatke in konfiguracijo?
|
||||
spanish.RemoveDataFolder=¿Eliminar todos los datos y la configuración?
|
||||
turkish.RemoveDataFolder=Tüm veriler ve yapılandırma kaldırılsın mı?
|
||||
ukrainian.RemoveDataFolder=Видалити всі дані та конфігурацію?
|
||||
|
||||
[Tasks]
|
||||
Name: "runapp"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"
|
||||
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
Name: "assoctorrent"; Description: "Associate {#MyAppName} with .torrent files"
|
||||
|
||||
[Files]
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
Source: "{#SourcePath}..\target\release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#SourcePath}..\mpv.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#SourcePath}..\bin\ffmpeg.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#SourcePath}..\bin\ffprobe.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#SourcePath}..\bin\stremio-runtime.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#SourcePath}..\server.js"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
[Registry]
|
||||
; Associate .torrent files if assoctorrent task is selected
|
||||
Root: HKA; Subkey: "Software\Classes\{#AssocTorrentExt}}\OpenWithProgids"; ValueType: string; ValueName: "{#AssocTorrentKey}"; ValueData: ""; Flags: uninsdeletevalue; Tasks: assoctorrent
|
||||
Root: HKA; Subkey: "Software\Classes\{#AssocTorrentKey}"; ValueType: string; ValueName: ""; ValueData: "{#AssocTorrentDesc}"; Flags: uninsdeletekey; Tasks: assoctorrent
|
||||
Root: HKA; Subkey: "Software\Classes\{#AssocTorrentKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"; Flags: uninsdeletekey; Tasks: assoctorrent
|
||||
Root: HKA; Subkey: "Software\Classes\{#AssocTorrentKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Flags: uninsdeletekey; Tasks: assoctorrent
|
||||
|
||||
; stremio: protocol
|
||||
Root: HKA; Subkey: "Software\Classes\stremio"; ValueType: string; ValueName: ""; ValueData: "URL:Stremio Protocol"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\stremio"; ValueType: string; ValueName: "URL Protocol"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\stremio\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\stremio\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Flags: uninsdeletekey
|
||||
|
||||
; magnet: protocol
|
||||
Root: HKA; Subkey: "Software\Classes\magnet"; ValueType: string; ValueName: ""; ValueData: "URL:BitTorrent magnet"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\magnet"; ValueType: string; ValueName: "URL Protocol"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\magnet\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\magnet\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Flags: uninsdeletekey
|
||||
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".torrent"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".avi"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".asf"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".mkv"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".mp4"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".mov"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".ogg"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".ogv"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".wmv"; ValueData: ""; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".srt"; ValueData: ""; Flags: uninsdeletekey
|
||||
|
||||
[Icons]
|
||||
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||
|
||||
; This is used if the desktop shortcut is created by the [run] section.
|
||||
; [UninstallDelete]
|
||||
; Type: files; Name: "{autodesktop}\{#MyAppName}.lnk"
|
||||
|
||||
; We don't use the run section as the .torrent association is very hard to handle
|
||||
; [Run]
|
||||
; Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||
; Filename: "cmd"; Parameters: "/c copy ""{autoprograms}\{#MyAppName}.lnk"" ""{autodesktop}"""; Description: "{cm:CreateDesktopIcon}"; Flags: postinstall skipifsilent shellexec runhidden waituntilterminated runascurrentuser
|
||||
31
setup/create_setup.bat
Normal file
31
setup/create_setup.bat
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
@echo off
|
||||
set mypath=%~dp0
|
||||
|
||||
:: Download ffmpeg and node
|
||||
set missing=
|
||||
if not exist "%mypath%..\bin" missing=1
|
||||
if not exist "%mypath%..\bin\node.exe" missing=1
|
||||
if not exist "%mypath%..\bin\ffmpeg.exe" missing=1
|
||||
if not exist "%mypath%..\bin\ffprobe.exe" missing=1
|
||||
if defined missing (
|
||||
powershell -nologo -executionpolicy bypass -File "%mypath%get_exe_from_zip.ps1"
|
||||
) else (
|
||||
echo Binaries for ffmpeg, ffprobe and node are already present
|
||||
)
|
||||
|
||||
:: Convert node to stremio-runtime
|
||||
if not exist "%mypath%..\stremio-runtime.exe" (
|
||||
call "%mypath%generate_stremio-runtime.bat" %mypath%..\bin
|
||||
) else (
|
||||
echo The executable stremio-runtime.exe is already generated
|
||||
)
|
||||
|
||||
:: Compile the main executable
|
||||
if not exist "%mypath%..\target\release\stremio-shell-ng.exe" (
|
||||
cargo build --release
|
||||
) else (
|
||||
echo Main executable is already built
|
||||
)
|
||||
|
||||
:: Compile the installer
|
||||
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "%mypath%Stremio.iss"
|
||||
76
setup/generate_stremio-runtime.bat
Normal file
76
setup/generate_stremio-runtime.bat
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
@echo off
|
||||
|
||||
:: Prepare paths and environment
|
||||
set "rt_path=%~dpf1"
|
||||
set rt_exe="%rt_path%\stremio-runtime.exe"
|
||||
|
||||
set rh="C:\RH\ResourceHacker.exe"
|
||||
|
||||
pushd %~dp0
|
||||
pushd ..\bin
|
||||
set node="%cd%\node.exe"
|
||||
popd
|
||||
pushd ..\images
|
||||
set rt_icon="%cd%\stremio_gray.ico"
|
||||
popd
|
||||
popd
|
||||
|
||||
:: Check if all paths are correct
|
||||
if not exist %rh% goto :norh
|
||||
if not exist %node% goto :nonode
|
||||
if not exist %rt_icon% goto :noico
|
||||
if not exist "%rt_path%\" goto :nodir
|
||||
|
||||
:: Create temp dir
|
||||
set "res_dir=%TEMP%\srres"
|
||||
md "%res_dir%"
|
||||
|
||||
:: Copy node.exe to the temp dir and remove signature
|
||||
copy %node% "%res_dir%\node.exe"
|
||||
set node="%res_dir%\node.exe"
|
||||
signtool remove /s %node%
|
||||
|
||||
:: Extract Node.js resources
|
||||
%rh% -open %node% -save "%res_dir%\resources.rc" -action extract -mask ",,"
|
||||
|
||||
:: Replace desired resources
|
||||
copy /D /Y %rt_icon% "%res_dir%\ICON1_1.ico"
|
||||
|
||||
set textFile="%res_dir%\resources.rc"
|
||||
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
|
||||
set "line=%%i"
|
||||
setlocal enabledelayedexpansion
|
||||
set line=!line:Node.js=Stremio Runtime!
|
||||
>>"%textFile%" echo !line:node.exe=stremio-runtime.exe!
|
||||
endlocal
|
||||
)
|
||||
|
||||
:: Compile new resource file
|
||||
pushd "%res_dir%"
|
||||
%rh% -open .\resources.rc -save .\stremio-rt.res -action compile
|
||||
popd
|
||||
|
||||
:: Build the stremio-runtime executable
|
||||
%rh% -open %node% -saveas %rt_exe% -action addoverwrite -res "%res_dir%\stremio-rt.res"
|
||||
|
||||
:: Cleanup
|
||||
rd /S /Q "%res_dir%"
|
||||
exit /b 0
|
||||
|
||||
:: Error states
|
||||
|
||||
:norh
|
||||
echo ResourceHacker.exe not found at %rh%
|
||||
exit /b 1
|
||||
|
||||
:nonode
|
||||
echo Node.exe not found at %node%
|
||||
exit /b 2
|
||||
|
||||
:noico
|
||||
echo Icon file not found at %rt_icon%
|
||||
exit /b 3
|
||||
|
||||
:nodir
|
||||
echo Destination directory does not exists at %rt_path%
|
||||
exit /b 4
|
||||
26
setup/get_exe_from_zip.ps1
Normal file
26
setup/get_exe_from_zip.ps1
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# This file downloads zip files and takes any executables from them.
|
||||
|
||||
$files = @(
|
||||
"https://github.com/vot/ffbinaries-prebuilt/releases/download/v3.3/ffmpeg-3.3.4-win-32.zip"
|
||||
"https://github.com/vot/ffbinaries-prebuilt/releases/download/v3.3/ffprobe-3.3.4-win-32.zip"
|
||||
"https://nodejs.org/dist/v16.17.0/node-v16.17.0-win-x86.zip"
|
||||
)
|
||||
|
||||
New-Item -Path ".\bin" -ItemType Directory -Force
|
||||
$archives = @()
|
||||
$workers = foreach ($url in $files) {
|
||||
$fn = ([uri]$url).Segments[-1]
|
||||
$archives += $fn
|
||||
$wc = New-Object System.Net.WebClient
|
||||
Write-Output $wc.DownloadFileTaskAsync($url, $fn)
|
||||
}
|
||||
|
||||
# wait until all files are downloaded
|
||||
$workers.Result
|
||||
|
||||
foreach ($f in $archives) {
|
||||
Expand-Archive -Path $f -DestinationPath ".\temp" -Force -PassThru | Where-Object { $_.Name.EndsWith(".exe") -and -not $_.Name.StartsWith(".")} | Copy-Item -Destination ".\bin\"
|
||||
Remove-Item $f
|
||||
}
|
||||
|
||||
Remove-Item ".\temp" -Recurse
|
||||
Loading…
Reference in a new issue