1
0
Форкнуть 0
Git-Credential-Manager-for-.../Installer/Setup.iss

376 строки
12 KiB
Plaintext
Исходник Постоянная ссылка Ответственный История

; This script requires Inno Setup Compiler 5.5.9 or later to compile
; The Inno Setup Compiler (and IDE) can be found at http://www.jrsoftware.org/isinfo.php
; The IDP plugin for Inno Setup is also required and can be found at https://mitrichsoftware.wordpress.com/inno-setup-tools/inno-download-plugin/
#if VER < EncodeVer(5,5,9)
#error Update your Inno Setup version (5.5.9 or newer)
#endif
#define binDir "."
#ifnexist binDir + "\git-credential-manager.exe"
#error Compile Git Credential Manager first
#endif
#ifnexist "..\..\packages\Tools.InnoSetup.Download.1.5.1\tools\InnoDownload\idp.iss"
#error IDP plugin for Inno Setup is also required and can be found at https://mitrichsoftware.wordpress.com/inno-setup-tools/inno-download-plugin/
#endif
#include <..\..\packages\Tools.InnoSetup.Download.1.5.1\tools\InnoDownload\idp.iss>
#define VerMajor
#define VerMinor
#define VerBuild
#define VerRevision
#expr ParseVersion(binDir + "\git-credential-manager.exe", VerMajor, VerMinor, VerBuild, VerRevision)
#define MyAppName "Microsoft Git Credential Manager for Windows"
#define MyAppVersion str(VerMajor) + "." + str(VerMinor) + "." + str(VerBuild)
#define MyAppPublisher "Microsoft Corporation"
#define MyAppPublisherURL "https://www.microsoft.com"
#define MyAppURL "https://github.com/Microsoft/Git-Credential-Manager-for-Windows"
#define MyAppExeName "git-credential-manager.exe"
#define Git4WinVer "2.17.0"
#define Git4WinVerLong = "v" + str(Git4WinVer) + ".windows.1"
#define Git4WinName "Git for Windows " + str(Git4WinVer)
#define Git4WinFile "Git-" + str(Git4WinVer) + "-64-bit.exe"
#define Git4WinUrl "https://github.com/git-for-windows/git/releases/download/" + str(Git4WinVerLong) + "/" + str(Git4WinFile)
#define Git4WinSpace 394309632
#define NetFxName "The Microsoft .NET Framework 4.7"
#define NetFxBaseFile "NetFx40Installer.exe"
#define NetFxBaseUrl "https://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe"
#define NetFxCoreFile "NetFx46Installer.exe"
#define NetFxCoreUrl "https://download.microsoft.com/download/A/E/A/AEAE0F3F-96E9-4711-AADA-5E35EF902306/NDP47-KB3186500-Web.exe"
#define NetFxSpace 381005824
[Setup]
AppId={{9F0CBE43-690B-4C03-8845-6AC2CDB29815}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppPublisherURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
AppContact={#MyAppURL}
AppCopyright=Copyright <20> Microsoft 2017
VersionInfoVersion={#MyAppVersion}
AppReadmeFile=https://github.com/Microsoft/Git-Credential-Manager-for-Windows/blob/master/README.md
BackColor=clWhite
BackSolid=yes
DefaultDirName={userpf}\{#MyAppName}
LicenseFile={#binDir}\LICENSE.txt
OutputBaseFilename=GCMW-{#MyAppVersion}
Compression=lzma2
InternalCompressLevel=ultra64
SolidCompression=yes
MinVersion=6.1.7600
DisableDirPage=yes
DisableReadyPage=yes
UninstallDisplayIcon={app}\git-credential-manager.exe
SetupIconFile=..\..\Assets\gcmicon.ico
ArchitecturesInstallIn64BitMode=x64
WizardImageFile=..\..\Assets\gcmicon128.bmp
WizardSmallImageFile=..\..\Assets\gcmicon64.bmp
WizardImageStretch=no
WindowResizable=no
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl";
[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom;
[Components]
Name: "NetFx"; Description: {#NetFxName}; ExtraDiskSpaceRequired: {#NetFxSpace}; Types: full; Flags: fixed; Check: DetectNetFxChecked;
Name: "Git4Win"; Description: {#Git4WinName}; ExtraDiskSpaceRequired: {#Git4WinSpace}; Types: full; Flags: fixed; Check: DetectGitChecked;
[Files]
Source: "{#binDir}\git-credential-manager.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\git-askpass.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\Microsoft.Alm.Authentication.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\AzureDevOps.Authentication.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\GitHub.Authentication.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\Bitbucket.Authentication.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\README.md"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\git-credential-manager.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#binDir}\git-askpass.html"; DestDir: "{app}"; Flags: ignoreversion
[Code]
type NetFx_Version = (
NetFx_v30, // .NET Framework 3.0
NetFx_v35, // .NET Framework 3.5
NetFx_v40, // .NET Framework 4.0
NetFx_v45, // .NET Framework 4.5
NetFx_v451, // .NET Framework 4.5.1
NetFx_v452, // .NET Framework 4.5.2
NetFx_v46, // .NET Framework 4.6
NetFx_v461, // .NET Framework 4.6.1
NetFx_v462, // .NET Framework 4.6.2
NetFx_v47 // .NET Framework 4.7
);
function DetectGit(): Boolean;
var
bSuccess: Boolean;
strValue: String;
begin
Result := True;
bSuccess := RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1', 'InstallLocation', strValue)
or RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1', 'InstallLocation', strValue)
or RegQueryStringValue(HKCU, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1', 'InstallLocation', strValue)
or RegQueryStringValue(HKCU, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1', 'InstallLocation', strValue);
if not bSuccess then
begin
Result := False;
end;
end;
function DetectGitChecked(): Boolean;
begin
Result := not DetectGit();
end;
function DetectNetFx(version: NetFx_Version): Boolean;
var
bSuccess: Boolean;
regVersion: Cardinal;
begin
Result := False;
bSuccess := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0', 'Install', regVersion);
if (NetFx_v30 = version) and bSuccess then
begin
Result := True;
end;
bSuccess := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', regVersion);
if (NetFx_v35 = version) and bSuccess then
begin
Result := True;
end;
bSuccess := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full', 'Install', regVersion)
or RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client', 'Install', regVersion);
if (NetFx_v40 = version) and bSuccess then
begin
Result := True;
end;
bSuccess := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', regVersion)
or RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client', 'Release', regVersion);
if bSuccess then
begin
if (NetFx_v45 = version) and (regVersion >= 378389)then
begin
Result := True;
end;
if (NetFx_v451 = version) and (regVersion >= 378675)then
begin
Result := True;
end;
if (NetFx_v452 = version) and (regVersion >= 379893)then
begin
Result := True;
end;
if (NetFx_v46 = version) and (regVersion >= 393295) then
begin
Result := True;
end;
if (NetFx_v461 = version) and (regVersion >= 394254) then
begin
Result := True;
end;
if (NetFx_v462 = version) and (regVersion >= 394802) then
begin
Result := True;
end;
if (NetFx_V47 = version) and (regVersion >= 460798) then
begin
Result := True;
end;
end;
end;
function DetectNetFxChecked(): Boolean;
begin
Result := not DetectNetFx(NetFx_v451);
end;
function InstallPrerequisites() : Boolean;
var
bInstallFx40: Boolean;
bInstallFx46: Boolean;
bInstallGit: Boolean;
StatusText: String;
ResultCode: Integer;
begin
Result := True;
bInstallFx40 := FileExists(ExpandConstant('{tmp}\{#NetFxBaseFile}'));
bInstallFx46 := FileExists(ExpandConstant('{tmp}\{#NetFxCoreFile}'));
bInstallGit := FileExists(ExpandConstant('{tmp}\{#Git4WinFile}'));
if bInstallFx40 or bInstallFx46 then
begin
StatusText := WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption := 'Installing {#NetFxName}. This might take a few minutes...';
WizardForm.ProgressGauge.Style := npbstMarquee;
try
if bInstallFx40 then
begin
if not Exec(ExpandConstant('{tmp}\{#NetFxBaseFile}'), '/passive /norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
Result := False;
MsgBox('.NET installation failed with code: ' + IntToStr(ResultCode) + '.', mbError, MB_OK);
end;
end;
if bInstallFx46 then
begin
if not Exec(ExpandConstant('{tmp}\{#NetFxCoreFile}'), '/passive /norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
Result := False;
MsgBox('.NET installation failed with code: ' + IntToStr(ResultCode) + '.', mbError, MB_OK);
end;
end;
finally
WizardForm.StatusLabel.Caption := StatusText;
WizardForm.ProgressGauge.Style := npbstNormal;
end;
end;
if bInstallGit then
begin
StatusText := WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption := 'Installing {#Git4WinName}. This might take a few minutes...';
WizardForm.ProgressGauge.Style := npbstMarquee;
try
if not Exec(ExpandConstant('{tmp}\{#Git4WinFile}'), '/NOCANCEL', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
Result := False;
MsgBox('Installing Git for Windows failed with code: ' + IntToStr(ResultCode) + '.', mbError, MB_OK);
end;
finally
WizardForm.StatusLabel.Caption := StatusText;
WizardForm.ProgressGauge.Style := npbstNormal;
end;
end;
end;
function InstallManager() : Boolean;
var
ResultCode: Integer;
StatusText: String;
begin
Result := False;
StatusText := WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption := 'Installing {#MyAppName}.';
WizardForm.ProgressGauge.Style := npbstMarquee;
try
if Exec(ExpandConstant('{app}\git-credential-manager.exe'), 'deploy --passive --nofail', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
Result := True;
end;
finally
WizardForm.StatusLabel.Caption := StatusText;
WizardForm.ProgressGauge.Style := npbstNormal;
end;
end;
function UninstallManager() : Boolean;
var
ResultCode: Integer;
begin
Result := false;
if Exec(ExpandConstant('{app}\git-credential-manager.exe'), 'remove --passive --nofail', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
Result := True;
end;
end;
function InitializeUninstall(): Boolean;
begin
Result := True;
end;
procedure InitializeWizard;
begin
if not DetectNetFx(NetFx_v40) then
begin
idpAddFile('{#NetFxBaseUrl}', ExpandConstant('{tmp}\{#NetFxBaseFile}'));
idpDownloadAfter(wpReady);
end;
if not DetectNetFx(NetFx_v451) then
begin
idpAddFile('{#NetFxCoreUrl}', ExpandConstant('{tmp}\{#NetFxCoreFile}'));
idpDownloadAfter(wpReady);
end;
if not DetectGit() then
begin
idpAddFile('{#Git4WinUrl}', ExpandConstant('{tmp}\{#Git4WinFile}'));
idpDownloadAfter(wpReady);
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpLicense then
begin
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall:
begin
if not (InstallPrerequisites()) then
begin
Abort();
end;
end;
ssPostInstall:
begin
if not (InstallManager()) then
begin
RaiseException('Fatal: An error occured when updating the local system.');
end;
end;
end;
end;
procedure CurUninstallStepChanged(CurStep: TUninstallStep);
begin
case CurStep of
usUninstall:
if not (UninstallManager()) then
begin
Abort();
end;
end;
end;