Add installer
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
; requires Windows 10, Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2008 R2 SP1, Windows Server 2008 Service Pack 2, Windows Server 2012, Windows Server 2012 R2, Windows Vista Service Pack 2
|
||||
; WARNING: express setup (downloads and installs the components depending on your OS) if you want to deploy it on cd or network download the full bootsrapper on website below
|
||||
; https://www.microsoft.com/en-US/download/details.aspx?id=49982
|
||||
|
||||
[CustomMessages]
|
||||
dotnetfx46_title=.NET Framework 4.6.1
|
||||
|
||||
dotnetfx46_size=1 MB - 65 MB
|
||||
|
||||
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
|
||||
en.dotnetfx46_lcid=
|
||||
|
||||
[Code]
|
||||
const
|
||||
dotnetfx461_url = 'http://download.microsoft.com/download/3/5/9/35980F81-60F4-4DE3-88FC-8F962B97253B/NDP461-KB3102438-Web.exe';
|
||||
|
||||
procedure dotnetfx46(minVersion: integer);
|
||||
begin
|
||||
if (not netfxinstalled(NetFx4x, '') or (netfxspversion(NetFx4x, '') < minVersion)) then
|
||||
AddProduct('dotnetfx46.exe',
|
||||
CustomMessage('dotnetfx46_lcid') + ' /passive /norestart',
|
||||
CustomMessage('dotnetfx46_title'),
|
||||
CustomMessage('dotnetfx46_size'),
|
||||
dotnetfx461_url,
|
||||
false, false, false);
|
||||
end;
|
||||
|
||||
[Setup]
|
||||
@@ -0,0 +1,94 @@
|
||||
[Code]
|
||||
type
|
||||
NetFXType = (NetFx10, NetFx11, NetFx20, NetFx30, NetFx35, NetFx40Client, NetFx40Full, NetFx4x);
|
||||
|
||||
const
|
||||
netfx11plus_reg = 'Software\Microsoft\NET Framework Setup\NDP\';
|
||||
|
||||
function netfxinstalled(version: NetFXType; lcid: string): boolean;
|
||||
var
|
||||
regVersion: cardinal;
|
||||
regVersionString: string;
|
||||
begin
|
||||
if (lcid <> '') then
|
||||
lcid := '\' + lcid;
|
||||
|
||||
if (version = NetFx10) then begin
|
||||
RegQueryStringValue(HKLM, 'Software\Microsoft\.NETFramework\Policy\v1.0\3705', 'Install', regVersionString);
|
||||
Result := regVersionString <> '';
|
||||
end else begin
|
||||
case version of
|
||||
NetFx11:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v1.1.4322' + lcid, 'Install', regVersion);
|
||||
NetFx20:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v2.0.50727' + lcid, 'Install', regVersion);
|
||||
NetFx30:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.0\Setup' + lcid, 'InstallSuccess', regVersion);
|
||||
NetFx35:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.5' + lcid, 'Install', regVersion);
|
||||
NetFx40Client:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Client' + lcid, 'Install', regVersion);
|
||||
NetFx40Full:
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Install', regVersion);
|
||||
NetFx4x:
|
||||
begin
|
||||
RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Release', regVersion);
|
||||
Result := (regVersion >= 378389); // 4.5.0+
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
Result := (regVersion <> 0);
|
||||
end;
|
||||
end;
|
||||
|
||||
function netfxspversion(version: NetFXType; lcid: string): integer;
|
||||
var
|
||||
regVersion: cardinal;
|
||||
begin
|
||||
if (lcid <> '') then
|
||||
lcid := '\' + lcid;
|
||||
|
||||
case version of
|
||||
NetFx10:
|
||||
//not supported
|
||||
regVersion := -1;
|
||||
NetFx11:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v1.1.4322' + lcid, 'SP', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx20:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v2.0.50727' + lcid, 'SP', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx30:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.0' + lcid, 'SP', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx35:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.5' + lcid, 'SP', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx40Client:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Client' + lcid, 'Servicing', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx40Full:
|
||||
if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Servicing', regVersion)) then
|
||||
regVersion := -1;
|
||||
NetFx4x:
|
||||
if (RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Release', regVersion)) then begin
|
||||
if (regVersion >= 394747) then
|
||||
regVersion := 62 // 4.6.2+
|
||||
else if (regVersion >= 394254) then
|
||||
regVersion := 61 // 4.6.1+
|
||||
else if (regVersion >= 393295) then
|
||||
regVersion := 60 // 4.6+
|
||||
else if (regVersion >= 379893) then
|
||||
regVersion := 52 // 4.5.2+
|
||||
else if (regVersion >= 378675) then
|
||||
regVersion := 51 // 4.5.1+
|
||||
else if (regVersion >= 378389) then
|
||||
regVersion := 50 // 4.5.0+
|
||||
else
|
||||
regVersion := -1;
|
||||
end;
|
||||
end;
|
||||
Result := regVersion;
|
||||
end;
|
||||
|
||||
[Setup]
|
||||
@@ -0,0 +1,25 @@
|
||||
[Code]
|
||||
function GetFullVersion(VersionMS, VersionLS: cardinal): string;
|
||||
var
|
||||
version: string;
|
||||
begin
|
||||
version := IntToStr(word(VersionMS shr 16));
|
||||
version := version + '.' + IntToStr(word(VersionMS and not $ffff0000));
|
||||
|
||||
version := version + '.' + IntToStr(word(VersionLS shr 16));
|
||||
version := version + '.' + IntToStr(word(VersionLS and not $ffff0000));
|
||||
|
||||
Result := version;
|
||||
end;
|
||||
|
||||
function fileversion(file: string): string;
|
||||
var
|
||||
versionMS, versionLS: cardinal;
|
||||
begin
|
||||
if GetVersionNumbers(file, versionMS, versionLS) then
|
||||
Result := GetFullVersion(versionMS, versionLS)
|
||||
else
|
||||
Result := '0';
|
||||
end;
|
||||
|
||||
[Setup]
|
||||
@@ -0,0 +1,62 @@
|
||||
[Code]
|
||||
function stringtoversion(var temp: String): Integer;
|
||||
var
|
||||
part: String;
|
||||
pos1: Integer;
|
||||
|
||||
begin
|
||||
if (Length(temp) = 0) then begin
|
||||
Result := -1;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
pos1 := Pos('.', temp);
|
||||
if (pos1 = 0) then begin
|
||||
Result := StrToInt(temp);
|
||||
temp := '';
|
||||
end else begin
|
||||
part := Copy(temp, 1, pos1 - 1);
|
||||
temp := Copy(temp, pos1 + 1, Length(temp));
|
||||
Result := StrToInt(part);
|
||||
end;
|
||||
end;
|
||||
|
||||
function compareinnerversion(var x, y: String): Integer;
|
||||
var
|
||||
num1, num2: Integer;
|
||||
|
||||
begin
|
||||
num1 := stringtoversion(x);
|
||||
num2 := stringtoversion(y);
|
||||
if (num1 = -1) and (num2 = -1) then begin
|
||||
Result := 0;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if (num1 < 0) then begin
|
||||
num1 := 0;
|
||||
end;
|
||||
if (num2 < 0) then begin
|
||||
num2 := 0;
|
||||
end;
|
||||
|
||||
if (num1 < num2) then begin
|
||||
Result := -1;
|
||||
end else if (num1 > num2) then begin
|
||||
Result := 1;
|
||||
end else begin
|
||||
Result := compareinnerversion(x, y);
|
||||
end;
|
||||
end;
|
||||
|
||||
function compareversion(versionA, versionB: String): Integer;
|
||||
var
|
||||
temp1, temp2: String;
|
||||
|
||||
begin
|
||||
temp1 := versionA;
|
||||
temp2 := versionB;
|
||||
Result := compareinnerversion(temp1, temp2);
|
||||
end;
|
||||
|
||||
[Setup]
|
||||
@@ -0,0 +1,49 @@
|
||||
[Code]
|
||||
var
|
||||
WindowsVersion: TWindowsVersion;
|
||||
|
||||
procedure initwinversion();
|
||||
begin
|
||||
GetWindowsVersionEx(WindowsVersion);
|
||||
end;
|
||||
|
||||
function exactwinversion(MajorVersion, MinorVersion: integer): boolean;
|
||||
begin
|
||||
Result := (WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor = MinorVersion);
|
||||
end;
|
||||
|
||||
function minwinversion(MajorVersion, MinorVersion: integer): boolean;
|
||||
begin
|
||||
Result := (WindowsVersion.Major > MajorVersion) or ((WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor >= MinorVersion));
|
||||
end;
|
||||
|
||||
function maxwinversion(MajorVersion, MinorVersion: integer): boolean;
|
||||
begin
|
||||
Result := (WindowsVersion.Major < MajorVersion) or ((WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor <= MinorVersion));
|
||||
end;
|
||||
|
||||
function exactwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean;
|
||||
begin
|
||||
if exactwinversion(MajorVersion, MinorVersion) then
|
||||
Result := WindowsVersion.ServicePackMajor = SpVersion
|
||||
else
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
function minwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean;
|
||||
begin
|
||||
if exactwinversion(MajorVersion, MinorVersion) then
|
||||
Result := WindowsVersion.ServicePackMajor >= SpVersion
|
||||
else
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
function maxwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean;
|
||||
begin
|
||||
if exactwinversion(MajorVersion, MinorVersion) then
|
||||
Result := WindowsVersion.ServicePackMajor <= SpVersion
|
||||
else
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
[Setup]
|
||||
Reference in New Issue
Block a user