mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-12-28 02:21:25 +00:00
templates/windows/installer: Formatting
This commit is contained in:
parent
c9239405e2
commit
63540faf3d
1 changed files with 167 additions and 157 deletions
|
@ -84,26 +84,57 @@ Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
|||
[Code]
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
var
|
||||
oPortablePageStaticChoice: TNewRadioButton;
|
||||
oPortablePagePortableChoice: TNewRadioButton;
|
||||
oPortablePageStaticChoice: TNewRadioButton;
|
||||
oPortablePagePortableChoice: TNewRadioButton;
|
||||
|
||||
function FindRegistryKey(): String; forward;
|
||||
function GetDefaultDirectory(Value: String): String; forward;
|
||||
function GetUninstallerPath(): String; forward;
|
||||
function IsUpgrade(): Boolean; forward;
|
||||
function IsPortablePagePortableChoiceChecked(): Boolean; forward;
|
||||
function UninstallOldVersion(): Integer; forward;
|
||||
procedure OnPortablePagePortableChoiceClick(Sender: TObject); forward;
|
||||
procedure OnPortablePageStaticChoiceClick(Sender: TObject); forward;
|
||||
function CreatePortablePage: TWizardPage; forward;
|
||||
// InnoSetup
|
||||
procedure InitializeWizard; forward;
|
||||
function ShouldSkipPage(PageID: Integer): Boolean; forward;
|
||||
function PrepareToInstall(var NeedsRestart: Boolean): String; forward;
|
||||
function GetDefaultDirectory(Value: String): String; forward;
|
||||
|
||||
// Which installation mode is selected?
|
||||
function IsPortablePagePortableChoiceChecked(): Boolean; forward;
|
||||
|
||||
// Other Metadata
|
||||
function FindRegistryKey(): String; forward;
|
||||
function GetUninstallerPath(): String; forward;
|
||||
function IsUpgrade(): Boolean; forward;
|
||||
function UninstallOldVersion(): Integer; forward;
|
||||
|
||||
// Mode Page
|
||||
function CreatePortablePage: TWizardPage; forward;
|
||||
procedure OnPortablePagePortableChoiceClick(Sender: TObject); forward;
|
||||
procedure OnPortablePageStaticChoiceClick(Sender: TObject); forward;
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function FindRegistryKey(): String;
|
||||
procedure InitializeWizard;
|
||||
var
|
||||
oPortablePage: TWizardPage;
|
||||
begin
|
||||
Result := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting('AppId')}_is1');
|
||||
oPortablePage := CreatePortablePage();
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function ShouldSkipPage(PageID: Integer): Boolean;
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function PrepareToInstall(var NeedsRestart: Boolean): String;
|
||||
var
|
||||
iResultCode: Integer;
|
||||
begin
|
||||
// Attempt to remove old version if it exists.
|
||||
if (IsUpgrade()) then begin
|
||||
UninstallOldVersion();
|
||||
end;
|
||||
|
||||
// Also ensure that we have the necessary prerequisites installed to run the program.
|
||||
ExtractTemporaryFile('msvc-redist-helper.exe');
|
||||
Exec(ExpandConstant('{tmp}\msvc-redist-helper.exe'), '2019', '', SW_HIDE, ewWaitUntilTerminated, iResultCode);
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
|
@ -133,6 +164,12 @@ begin
|
|||
Result := sInstallPath
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function FindRegistryKey(): String;
|
||||
begin
|
||||
Result := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting('AppId')}_is1');
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function GetUninstallerPath(): String;
|
||||
var
|
||||
|
@ -182,18 +219,18 @@ end;
|
|||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
procedure OnPortablePagePortableChoiceClick(Sender: TObject);
|
||||
begin
|
||||
oPortablePageStaticChoice.Checked := False;
|
||||
oPortablePagePortableChoice.Checked := True;
|
||||
oPortablePageStaticChoice.Checked := False;
|
||||
oPortablePagePortableChoice.Checked := True;
|
||||
end;
|
||||
|
||||
procedure OnPortablePageStaticChoiceClick(Sender: TObject);
|
||||
begin
|
||||
if (not oPortablePageStaticChoice.Enabled) then begin
|
||||
OnPortablePagePortableChoiceClick(Sender);
|
||||
end else begin
|
||||
oPortablePageStaticChoice.Checked := True;
|
||||
oPortablePagePortableChoice.Checked := False;
|
||||
end;
|
||||
if (not oPortablePageStaticChoice.Enabled) then begin
|
||||
OnPortablePagePortableChoiceClick(Sender);
|
||||
end else begin
|
||||
oPortablePageStaticChoice.Checked := True;
|
||||
oPortablePagePortableChoice.Checked := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
function IsPortablePagePortableChoiceChecked(): Boolean;
|
||||
|
@ -203,152 +240,125 @@ end;
|
|||
|
||||
function CreatePortablePage: TWizardPage;
|
||||
var
|
||||
oPage: TWizardPage;
|
||||
oStaticPanel: TPanel;
|
||||
oStaticChoice: TNewRadioButton;
|
||||
oStaticText: TLabel;
|
||||
oStaticWarningText: TLabel;
|
||||
oPortablePanel: TPanel;
|
||||
oPortableChoice: TNewRadioButton;
|
||||
oPortableText: TLabel;
|
||||
oPage: TWizardPage;
|
||||
oStaticPanel: TPanel;
|
||||
oStaticChoice: TNewRadioButton;
|
||||
oStaticText: TLabel;
|
||||
oStaticWarningText: TLabel;
|
||||
oPortablePanel: TPanel;
|
||||
oPortableChoice: TNewRadioButton;
|
||||
oPortableText: TLabel;
|
||||
begin
|
||||
// Build a page that asks a user if they want to use Movable or Static installation.
|
||||
oPage := CreateCustomPage(wpLicense,
|
||||
'Installation Type',
|
||||
'Select how to install StreamFX on your System');
|
||||
// Build a page that asks a user if they want to use Movable or Static installation.
|
||||
oPage := CreateCustomPage(wpLicense,
|
||||
'Installation Type',
|
||||
'Select how to install StreamFX on your System');
|
||||
|
||||
oStaticPanel := TPanel.Create(oPage);
|
||||
oStaticPanel.Parent := oPage.Surface;
|
||||
oStaticPanel.ParentBackground := False;
|
||||
oStaticPanel.Left := ScaleX(5);
|
||||
oStaticPanel.Top := ScaleY(5);
|
||||
oStaticPanel.Width := oPage.SurfaceWidth - ScaleX(10);
|
||||
oStaticPanel.Height := ScaleY(100);
|
||||
oStaticPanel.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticPanel.Color := clWindow;
|
||||
oStaticPanel.BevelKind := bkTile;
|
||||
oStaticPanel.BevelInner := bvNone;
|
||||
oStaticPanel.BevelOuter := bvRaised;
|
||||
oStaticPanel.BevelWidth := 1;
|
||||
oStaticPanel.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
oStaticPanel := TPanel.Create(oPage);
|
||||
oStaticPanel.Parent := oPage.Surface;
|
||||
oStaticPanel.ParentBackground := False;
|
||||
oStaticPanel.Left := ScaleX(5);
|
||||
oStaticPanel.Top := ScaleY(5);
|
||||
oStaticPanel.Width := oPage.SurfaceWidth - ScaleX(10);
|
||||
oStaticPanel.Height := ScaleY(100);
|
||||
oStaticPanel.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticPanel.Color := clWindow;
|
||||
oStaticPanel.BevelKind := bkTile;
|
||||
oStaticPanel.BevelInner := bvNone;
|
||||
oStaticPanel.BevelOuter := bvRaised;
|
||||
oStaticPanel.BevelWidth := 1;
|
||||
oStaticPanel.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
|
||||
oStaticChoice := TNewRadioButton.Create(oStaticPanel);
|
||||
oPortablePageStaticChoice := oStaticChoice;
|
||||
oStaticChoice.Parent := oStaticPanel;
|
||||
oStaticChoice.ParentBackground := False;
|
||||
oStaticChoice.Left := ScaleX(5);
|
||||
oStaticChoice.Top := ScaleY(5);
|
||||
oStaticChoice.Width := oStaticPanel.Width - ScaleX(10);
|
||||
oStaticChoice.Height := ScaleY(20);
|
||||
oStaticChoice.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticChoice.Caption := 'Static';
|
||||
oStaticChoice.Font.Style := [fsBold];
|
||||
oStaticChoice.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
oStaticChoice := TNewRadioButton.Create(oStaticPanel);
|
||||
oPortablePageStaticChoice := oStaticChoice;
|
||||
oStaticChoice.Parent := oStaticPanel;
|
||||
oStaticChoice.ParentBackground := False;
|
||||
oStaticChoice.Left := ScaleX(5);
|
||||
oStaticChoice.Top := ScaleY(5);
|
||||
oStaticChoice.Width := oStaticPanel.Width - ScaleX(10);
|
||||
oStaticChoice.Height := ScaleY(20);
|
||||
oStaticChoice.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticChoice.Caption := 'Static';
|
||||
oStaticChoice.Font.Style := [fsBold];
|
||||
oStaticChoice.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
|
||||
oStaticText := TLabel.Create(oStaticPanel);
|
||||
oStaticText.Parent := oStaticPanel;
|
||||
oStaticText.AutoSize := False;
|
||||
oStaticText.Left := ScaleX(5);
|
||||
oStaticText.Top := ScaleY(5) + oStaticChoice.Top + oStaticChoice.Height;
|
||||
oStaticText.Width := oStaticPanel.Width - ScaleX(10);
|
||||
oStaticText.Height := oStaticPanel.Height - ScaleX(5) - oStaticText.Top;
|
||||
oStaticText.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticText.WordWrap := True
|
||||
oStaticText.Caption := 'Install for use in a static version of OBS Studio, with all necessary features to support it.';
|
||||
oStaticText.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
oStaticText := TLabel.Create(oStaticPanel);
|
||||
oStaticText.Parent := oStaticPanel;
|
||||
oStaticText.AutoSize := False;
|
||||
oStaticText.Left := ScaleX(5);
|
||||
oStaticText.Top := ScaleY(5) + oStaticChoice.Top + oStaticChoice.Height;
|
||||
oStaticText.Width := oStaticPanel.Width - ScaleX(10);
|
||||
oStaticText.Height := oStaticPanel.Height - ScaleX(5) - oStaticText.Top;
|
||||
oStaticText.Anchors := [akLeft, akTop, akRight];
|
||||
oStaticText.WordWrap := True
|
||||
oStaticText.Caption := 'Install for use in a static version of OBS Studio, with all necessary features to support it.';
|
||||
oStaticText.OnClick := @OnPortablePageStaticChoiceClick;
|
||||
|
||||
oPortablePanel := TPanel.Create(oPage);
|
||||
oPortablePanel.Parent := oPage.Surface;
|
||||
oPortablePanel.ParentBackground := False;
|
||||
oPortablePanel.Left := ScaleX(5);
|
||||
oPortablePanel.Top := ScaleY(5) + oStaticPanel.Top + oStaticPanel.Height;
|
||||
oPortablePanel.Width := oPage.SurfaceWidth - ScaleX(10);
|
||||
oPortablePanel.Height := ScaleY(100);
|
||||
oPortablePanel.Anchors := [akLeft, akTop, akRight];
|
||||
oPortablePanel.Color := clWindow;
|
||||
oPortablePanel.BevelKind := bkTile;
|
||||
oPortablePanel.BevelInner := bvNone;
|
||||
oPortablePanel.BevelOuter := bvRaised;
|
||||
oPortablePanel.BevelWidth := 1;
|
||||
oPortablePanel.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
oPortablePanel := TPanel.Create(oPage);
|
||||
oPortablePanel.Parent := oPage.Surface;
|
||||
oPortablePanel.ParentBackground := False;
|
||||
oPortablePanel.Left := ScaleX(5);
|
||||
oPortablePanel.Top := ScaleY(5) + oStaticPanel.Top + oStaticPanel.Height;
|
||||
oPortablePanel.Width := oPage.SurfaceWidth - ScaleX(10);
|
||||
oPortablePanel.Height := ScaleY(100);
|
||||
oPortablePanel.Anchors := [akLeft, akTop, akRight];
|
||||
oPortablePanel.Color := clWindow;
|
||||
oPortablePanel.BevelKind := bkTile;
|
||||
oPortablePanel.BevelInner := bvNone;
|
||||
oPortablePanel.BevelOuter := bvRaised;
|
||||
oPortablePanel.BevelWidth := 1;
|
||||
oPortablePanel.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
|
||||
oPortableChoice := TNewRadioButton.Create(oPortablePanel);
|
||||
oPortablePagePortableChoice := oPortableChoice;
|
||||
oPortableChoice.Parent := oPortablePanel;
|
||||
oPortableChoice.ParentBackground := False;
|
||||
oPortableChoice.Left := ScaleX(5);
|
||||
oPortableChoice.Top := ScaleY(5);
|
||||
oPortableChoice.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oPortableChoice.Height := ScaleY(20);
|
||||
oPortableChoice.Anchors := [akLeft, akTop, akRight];
|
||||
oPortableChoice.Caption := 'Portable';
|
||||
oPortableChoice.Font.Style := [fsBold];
|
||||
oPortableChoice.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
oPortableChoice := TNewRadioButton.Create(oPortablePanel);
|
||||
oPortablePagePortableChoice := oPortableChoice;
|
||||
oPortableChoice.Parent := oPortablePanel;
|
||||
oPortableChoice.ParentBackground := False;
|
||||
oPortableChoice.Left := ScaleX(5);
|
||||
oPortableChoice.Top := ScaleY(5);
|
||||
oPortableChoice.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oPortableChoice.Height := ScaleY(20);
|
||||
oPortableChoice.Anchors := [akLeft, akTop, akRight];
|
||||
oPortableChoice.Caption := 'Portable';
|
||||
oPortableChoice.Font.Style := [fsBold];
|
||||
oPortableChoice.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
|
||||
oPortableText := TLabel.Create(oPortablePanel);
|
||||
oPortableText.Parent := oPortablePanel;
|
||||
oPortableText.AutoSize := False;
|
||||
oPortableText.Left := ScaleX(5);
|
||||
oPortableText.Top := ScaleY(5) + oPortableChoice.Top + oPortableChoice.Height;
|
||||
oPortableText.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oPortableText.Height := oPortablePanel.Height - ScaleX(5) - oPortableText.Top;
|
||||
oPortableText.Anchors := [akLeft, akTop, akRight];
|
||||
oPortableText.WordWrap := True
|
||||
oPortableText.Caption := 'Install for use in portable or multi-environment scenarios, which require StreamFX to not be tied to the System itself. The uninstaller, automatic updates and other system-dependent features will be unavailable.';
|
||||
oPortableText.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
oPortableText := TLabel.Create(oPortablePanel);
|
||||
oPortableText.Parent := oPortablePanel;
|
||||
oPortableText.AutoSize := False;
|
||||
oPortableText.Left := ScaleX(5);
|
||||
oPortableText.Top := ScaleY(5) + oPortableChoice.Top + oPortableChoice.Height;
|
||||
oPortableText.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oPortableText.Height := oPortablePanel.Height - ScaleX(5) - oPortableText.Top;
|
||||
oPortableText.Anchors := [akLeft, akTop, akRight];
|
||||
oPortableText.WordWrap := True
|
||||
oPortableText.Caption := 'Install for use in portable or multi-environment scenarios, which require StreamFX to not be tied to the System itself. The uninstaller, automatic updates and other system-dependent features will be unavailable.';
|
||||
oPortableText.OnClick := @OnPortablePagePortableChoiceClick;
|
||||
|
||||
if (not IsAdmin()) then begin
|
||||
oStaticWarningText := TLabel.Create(oStaticPanel);
|
||||
oStaticWarningText.Parent := oStaticPanel;
|
||||
oStaticWarningText.AutoSize := False;
|
||||
oStaticWarningText.Left := ScaleX(5);
|
||||
oStaticWarningText.Top := oPortablePanel.Height - ScaleY(5) - ScaleY(15);
|
||||
oStaticWarningText.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oStaticWarningText.Height := ScaleY(15);
|
||||
oStaticWarningText.Anchors := [akLeft, akBottom, akRight];
|
||||
oStaticWarningText.WordWrap := True
|
||||
oStaticWarningText.Font.Color := clRed;
|
||||
oStaticWarningText.Font.Style := [fsBold];
|
||||
oStaticWarningText.Caption := 'Please launch the Installer as Administrator for static installations.';
|
||||
if (not IsAdmin()) then begin
|
||||
oStaticWarningText := TLabel.Create(oStaticPanel);
|
||||
oStaticWarningText.Parent := oStaticPanel;
|
||||
oStaticWarningText.AutoSize := False;
|
||||
oStaticWarningText.Left := ScaleX(5);
|
||||
oStaticWarningText.Top := oPortablePanel.Height - ScaleY(5) - ScaleY(15);
|
||||
oStaticWarningText.Width := oPortablePanel.Width - ScaleX(10);
|
||||
oStaticWarningText.Height := ScaleY(15);
|
||||
oStaticWarningText.Anchors := [akLeft, akBottom, akRight];
|
||||
oStaticWarningText.WordWrap := True
|
||||
oStaticWarningText.Font.Color := clRed;
|
||||
oStaticWarningText.Font.Style := [fsBold];
|
||||
oStaticWarningText.Caption := 'Please launch the Installer as Administrator for static installations.';
|
||||
|
||||
oStaticPanel.Enabled := False;
|
||||
oStaticChoice.Enabled := False;
|
||||
oStaticText.Enabled := False;
|
||||
oStaticPanel.Enabled := False;
|
||||
oStaticChoice.Enabled := False;
|
||||
oStaticText.Enabled := False;
|
||||
|
||||
oStaticChoice.Checked := False;
|
||||
oPortableChoice.Checked := True;
|
||||
end else begin
|
||||
oStaticChoice.Checked := True;
|
||||
oPortableChoice.Checked := False;
|
||||
end;
|
||||
|
||||
Result := oPage;
|
||||
end;
|
||||
|
||||
procedure InitializeWizard;
|
||||
var
|
||||
oPortablePage: TWizardPage;
|
||||
begin
|
||||
oPortablePage := CreatePortablePage();
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function ShouldSkipPage(PageID: Integer): Boolean;
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------ //
|
||||
function PrepareToInstall(var NeedsRestart: Boolean): String;
|
||||
var
|
||||
iResultCode: Integer;
|
||||
begin
|
||||
// Attempt to remove old version if it exists.
|
||||
if (IsUpgrade()) then begin
|
||||
UninstallOldVersion();
|
||||
oStaticChoice.Checked := False;
|
||||
oPortableChoice.Checked := True;
|
||||
end else begin
|
||||
oStaticChoice.Checked := True;
|
||||
oPortableChoice.Checked := False;
|
||||
end;
|
||||
|
||||
// Also ensure that we have the necessary prerequisites installed to run the program.
|
||||
ExtractTemporaryFile('msvc-redist-helper.exe');
|
||||
Exec(ExpandConstant('{tmp}\msvc-redist-helper.exe'), '2019', '', SW_HIDE, ewWaitUntilTerminated, iResultCode);
|
||||
Result := oPage;
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in a new issue