Skip to content

Commit f211f42

Browse files
committed
Update the version check on the installer
1 parent 3d0d030 commit f211f42

File tree

4 files changed

+46
-23
lines changed

4 files changed

+46
-23
lines changed

Rubberduck.Deployment/InnoSetup/Includes/English.CustomMessages.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ English.Everyone=All Users
44
English.RegisterAddin=Repair VBE Addin registration
55
English.ProgramOnTheWeb=Rubberduck VBA website
66
English.UninstallProgram=Uninstall Rubberduck
7-
English.NETFramework45NotInstalled=Microsoft .NET Framework 4.5 installation was not detected.
7+
English.NETFramework46NotInstalled=Microsoft .NET Framework 4.6 installation was not detected.
88
English.InstallPerUserOrAllUsersCaption=Choose an installation options
99
English.InstallPerUserOrAllUsersMessage=Who should this application be installed for?
1010
English.InstallPerUserOrAllUsersAdminDescription=Please select whether you wish to make this software available for all users or just for yourself.

Rubberduck.Deployment/InnoSetup/Includes/French.CustomMessages.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ French.Everyone=Tous les utilisateurs
44
French.RegisterAddin=Réparer l'enregistrement du complément VBE
55
French.ProgramOnTheWeb=Site web de Rubberduck
66
French.UninstallProgram=Désinstaller Rubberduck
7-
French.NETFramework45NotInstalled=Microsoft .NET Framework 4.5 n'a pas pu être détecté.
7+
French.NETFramework46NotInstalled=Microsoft .NET Framework 4.6 n'a pas pu être détecté.
88
French.InstallPerUserOrAllUsersCaption=Sélectionnez le mode d'installation
99
French.InstallPerUserOrAllUsersMessage=Pour qui cette application doit-elle être installée?
1010
French.InstallPerUserOrAllUsersAdminDescription=Veuillez déterminer si vous désirez rendre le logiciel disponible pour vous seulement ou pour tous les utilisateurs de cette machine.

Rubberduck.Deployment/InnoSetup/Includes/German.CustomMessages.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ German.Everyone=Alle Benutzer
44
German.RegisterAddin=VBE AddIn Registrierung reparieren
55
German.ProgramOnTheWeb=Rubberduck VBA Website
66
German.UninstallProgram=Rubberduck deinstallieren
7-
German.NETFramework45NotInstalled=Microsoft .NET Framework 4.5 konnte nicht gefunden werden.
7+
German.NETFramework46NotInstalled=Microsoft .NET Framework 4.6 konnte nicht gefunden werden.
88
German.InstallPerUserOrAllUsersCaption=Eine Installationsoption wähen
99
German.InstallPerUserOrAllUsersMessage=Für wen soll diese Anwendung installiert werden?
1010
German.InstallPerUserOrAllUsersAdminDescription=Bitte wählen Sie, ob diese Anwendung für alle Benutzer or nur für Sie selbst verfügbar sein soll.

Rubberduck.Deployment/InnoSetup/Installer Build Script.iss

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -365,31 +365,54 @@ function IsDotNetDetected(version: string; service: cardinal): boolean;
365365
// Indicates whether the specified version and service pack of the .NET Framework is installed.
366366
//
367367
// version -- Specify one of these strings for the required .NET Framework version:
368-
// 'v1.1.4322' .NET Framework 1.1
369-
// 'v2.0.50727' .NET Framework 2.0
368+
// 'v1.1' .NET Framework 1.1
369+
// 'v2.0' .NET Framework 2.0
370370
// 'v3.0' .NET Framework 3.0
371371
// 'v3.5' .NET Framework 3.5
372372
// 'v4\Client' .NET Framework 4.0 Client Profile
373373
// 'v4\Full' .NET Framework 4.0 Full Installation
374374
// 'v4.5' .NET Framework 4.5
375+
// 'v4.5.1' .NET Framework 4.5.1
376+
// 'v4.5.2' .NET Framework 4.5.2
377+
// 'v4.6' .NET Framework 4.6
378+
// 'v4.6.1' .NET Framework 4.6.1
379+
// 'v4.6.2' .NET Framework 4.6.2
380+
// 'v4.7' .NET Framework 4.7
375381
//
376382
// service -- Specify any non-negative integer for the required service pack level:
377383
// 0 No service packs required
378384
// 1, 2, etc. Service pack 1, 2, etc. required
379385
var
380-
key: string;
381-
install, release, serviceCount: cardinal;
382-
check45, success: boolean;
386+
key, versionKey: string;
387+
install, release, serviceCount, versionRelease: cardinal;
388+
success: boolean;
383389
begin
384-
// .NET 4.5 installs as update to .NET 4.0 Full
385-
if version = 'v4.5' then begin
386-
version := 'v4\Full';
387-
check45 := true;
388-
end else
389-
check45 := false;
390+
versionKey := version;
391+
versionRelease := 0;
392+
393+
// .NET 1.1 and 2.0 embed release number in version key
394+
if version = 'v1.1' then begin
395+
versionKey := 'v1.1.4322';
396+
end else if version = 'v2.0' then begin
397+
versionKey := 'v2.0.50727';
398+
end
399+
400+
// .NET 4.5 and newer install as update to .NET 4.0 Full
401+
else if Pos('v4.', version) = 1 then begin
402+
versionKey := 'v4\Full';
403+
case version of
404+
'v4.5': versionRelease := 378389;
405+
'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older
406+
'v4.5.2': versionRelease := 379893;
407+
'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older
408+
'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update
409+
'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update
410+
'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update
411+
end;
412+
end;
390413
391414
// installation key group for all .NET versions
392-
key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + version;
415+
key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey;
393416
394417
// .NET 3.0 uses value InstallSuccess in subkey Setup
395418
if Pos('v3.0', version) = 1 then begin
@@ -398,17 +421,17 @@ begin
398421
success := RegQueryDWordValue(HKLM, key, 'Install', install);
399422
end;
400423
401-
// .NET 4.0/4.5 uses value Servicing instead of SP
424+
// .NET 4.0 and newer use value Servicing instead of SP
402425
if Pos('v4', version) = 1 then begin
403426
success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
404427
end else begin
405428
success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
406429
end;
407430
408-
// .NET 4.5 uses additional value Release
409-
if check45 then begin
431+
// .NET 4.5 and newer use additional value Release
432+
if versionRelease > 0 then begin
410433
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
411-
success := success and (release >= 378389);
434+
success := success and (release >= versionRelease);
412435
end;
413436
414437
result := success and (install = 1) and (serviceCount >= service);
@@ -767,12 +790,12 @@ function InitializeSetup(): Boolean;
767790
var
768791
ErrorCode: Integer;
769792
begin
770-
// MS .NET Framework 4.5 must be installed for this application to work.
771-
if not IsDotNetDetected('v4.5', 0) then
793+
// MS .NET Framework 4.6 must be installed for this application to work.
794+
if not IsDotNetDetected('v4.6', 0) then
772795
begin
773796
Log('User does not have the prerequisite .NET framework installed');
774-
MsgBox(ExpandConstant('{cm:NETFramework45NotInstalled}'), mbCriticalError, mb_Ok);
775-
ShellExec('open', 'http://msdn.microsoft.com/en-us/netframework/aa731542', '', '', SW_SHOW, ewNoWait, ErrorCode);
797+
MsgBox(ExpandConstant('{cm:NETFramework46NotInstalled}'), mbCriticalError, mb_Ok);
798+
ShellExec('open', 'https://www.microsoft.com/net/download/dotnet-framework-runtime/net46', '', '', SW_SHOW, ewNoWait, ErrorCode);
776799
Result := False;
777800
end
778801
else

0 commit comments

Comments
 (0)