mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-05-10 08:34:06 +02:00
Make the portable installer fully autonomous
This commit is contained in:
parent
802f1e3042
commit
5da02b4092
@ -57,7 +57,6 @@ Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\Cache"
|
||||
Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\GPUCache"
|
||||
|
||||
[Code]
|
||||
var IsPortableInstallation: Boolean;
|
||||
var UpdatePath: String;
|
||||
|
||||
function TDGetNetFrameworkVersion: Cardinal; forward;
|
||||
@ -65,16 +64,8 @@ function TDGetNetFrameworkVersion: Cardinal; forward;
|
||||
{ Check .NET Framework version on startup, ask user if they want to proceed if older than 4.5.2. }
|
||||
function InitializeSetup: Boolean;
|
||||
begin
|
||||
IsPortableInstallation := ExpandConstant('{param:PORTABLEINSTALL}') = '1'
|
||||
UpdatePath := ExpandConstant('{param:UPDATEPATH}')
|
||||
|
||||
if IsPortableInstallation and (UpdatePath = '') then
|
||||
begin
|
||||
MsgBox('The /PORTABLEINSTALL flag requires the /UPDATEPATH parameter.', mbCriticalError, MB_OK);
|
||||
Result := False;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if TDGetNetFrameworkVersion() >= 379893 then
|
||||
begin
|
||||
Result := True;
|
||||
@ -125,25 +116,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Create a 'makeportable' file if running in portable mode. }
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if (CurStep = ssPostInstall) and IsPortableInstallation then
|
||||
begin
|
||||
while not SaveStringToFile(ExpandConstant('{app}\makeportable'), '', False) do
|
||||
begin
|
||||
if MsgBox('Could not create a ''makeportable'' file in the installation folder. If the file is not present, the installation will not be fully portable.', mbCriticalError, MB_RETRYCANCEL) <> IDRETRY then
|
||||
begin
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Returns true if the installer should create uninstallation entries (i.e. not running in portable or full update mode). }
|
||||
{ Returns true if the installer should create uninstallation entries (i.e. not running in full update mode). }
|
||||
function TDIsUninstallable: Boolean;
|
||||
begin
|
||||
Result := (UpdatePath = '') and not IsPortableInstallation
|
||||
Result := (UpdatePath = '')
|
||||
end;
|
||||
|
||||
{ Return DWORD value containing the build version of .NET Framework. }
|
||||
|
@ -30,27 +30,22 @@ SolidCompression=yes
|
||||
InternalCompressLevel=max
|
||||
MinVersion=0,6.1
|
||||
|
||||
#include <idp.iss>
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Files]
|
||||
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,devtools_resources.pak,d3dcompiler_43.dll"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec
|
||||
|
||||
[Code]
|
||||
function TDGetNetFrameworkVersion: Cardinal; forward;
|
||||
function TDGetAppVersionClean: String; forward;
|
||||
procedure TDExecuteFullDownload; forward;
|
||||
|
||||
{ Check .NET Framework version on startup, ask user if they want to proceed if older than 4.5.2, and prepare full download package. }
|
||||
{ Check .NET Framework version on startup, ask user if they want to proceed if older than 4.5.2. }
|
||||
function InitializeSetup: Boolean;
|
||||
begin
|
||||
idpAddFile('https://github.com/{#MyAppPublisher}/{#MyAppName}/releases/download/'+TDGetAppVersionClean()+'/{#MyAppName}.exe', ExpandConstant('{tmp}\{#MyAppName}.Full.exe'));
|
||||
|
||||
if TDGetNetFrameworkVersion() >= 379893 then
|
||||
begin
|
||||
Result := True;
|
||||
@ -66,21 +61,6 @@ begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
{ Prepare download plugin if there are any files to download, and set the installation path. }
|
||||
procedure InitializeWizard();
|
||||
begin
|
||||
idpDownloadAfter(wpReady);
|
||||
end;
|
||||
|
||||
{ Remove uninstallation data and application to force them to be replaced with updated ones. }
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssInstall then
|
||||
begin
|
||||
TDExecuteFullDownload();
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Return DWORD value containing the build version of .NET Framework. }
|
||||
function TDGetNetFrameworkVersion: Cardinal;
|
||||
var FrameworkVersion: Cardinal;
|
||||
@ -95,56 +75,17 @@ begin
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
{ Return a cleaned up form of the app version string (removes all .0 suffixes). }
|
||||
function TDGetAppVersionClean: String;
|
||||
var Substr: String;
|
||||
var CleanVersion: String;
|
||||
|
||||
{ Create a 'makeportable' file if running in portable mode. }
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
CleanVersion := '{#MyAppVersion}'
|
||||
|
||||
while True do
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
Substr := Copy(CleanVersion, Length(CleanVersion)-1, 2);
|
||||
|
||||
if (CompareStr(Substr, '.0') <> 0) then
|
||||
while not SaveStringToFile(ExpandConstant('{app}\makeportable'), '', False) do
|
||||
begin
|
||||
break;
|
||||
end;
|
||||
|
||||
CleanVersion := Copy(CleanVersion, 1, Length(CleanVersion)-2);
|
||||
end;
|
||||
|
||||
Result := CleanVersion;
|
||||
end;
|
||||
|
||||
{ Run the full package installer if downloaded. }
|
||||
procedure TDExecuteFullDownload;
|
||||
var InstallFile: String;
|
||||
var ResultCode: Integer;
|
||||
|
||||
begin
|
||||
InstallFile := ExpandConstant('{tmp}\{#MyAppName}.Full.exe')
|
||||
WizardForm.ProgressGauge.Style := npbstMarquee;
|
||||
|
||||
try
|
||||
if Exec(InstallFile, '/SP- /SILENT /MERGETASKS="!desktopicon" /UPDATEPATH="'+ExpandConstant('{app}\')+'" /PORTABLEINSTALL=1', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
|
||||
if ResultCode <> 0 then
|
||||
if MsgBox('Could not create a ''makeportable'' file in the installation folder. If the file is not present, the installation will not be fully portable.', mbCriticalError, MB_RETRYCANCEL) <> IDRETRY then
|
||||
begin
|
||||
DeleteFile(InstallFile);
|
||||
Abort();
|
||||
Exit;
|
||||
break;
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
MsgBox('Could not run the full installer in portable mode. Error: '+SysErrorMessage(ResultCode), mbCriticalError, MB_OK);
|
||||
|
||||
DeleteFile(InstallFile);
|
||||
Abort();
|
||||
Exit;
|
||||
end;
|
||||
finally
|
||||
WizardForm.ProgressGauge.Style := npbstNormal;
|
||||
DeleteFile(InstallFile);
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user