Skip to content

Commit 2f43dee

Browse files
committed
Fix arch-mismatched HKLM view in registry-based dependency checks (#134)
1 parent 21f0324 commit 2f43dee

1 file changed

Lines changed: 23 additions & 14 deletions

File tree

CodeDependencies.iss

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,15 @@ begin
263263
Result := Dependency_String(' (x86)', ' (x64)', ' (arm64)');
264264
end;
265265
266+
function Dependency_ArchHKLM: Integer;
267+
begin
268+
if Dependency_IsArm64 or Dependency_IsX64 then begin
269+
Result := HKLM64;
270+
end else begin
271+
Result := HKLM32;
272+
end;
273+
end;
274+
266275
function Dependency_PassiveOrQuiet(const Passive, Quiet: String): String;
267276
begin
268277
if WizardSilent then begin
@@ -650,7 +659,7 @@ var
650659
PackedVersion: Int64;
651660
begin
652661
// https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
653-
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\' + Dependency_String('x86', 'x64', 'arm64'), 'Version', Version) and (Copy(Version, 1, 1) = 'v') then begin
662+
if RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\' + Dependency_String('x86', 'x64', 'arm64'), 'Version', Version) and (Copy(Version, 1, 1) = 'v') then begin
654663
Delete(Version, 1, 1);
655664
end;
656665
if not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(14, 51, 36247, 0)) < 0) then begin
@@ -681,7 +690,7 @@ var
681690
PackedVersion: Int64;
682691
begin
683692
// https://www.microsoft.com/en-us/download/details.aspx?id=30438
684-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(10, 50, 4000, 0)) < 0) then begin
693+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(10, 50, 4000, 0)) < 0) then begin
685694
Dependency_Add('sql2008express' + Dependency_ArchSuffix + '.exe',
686695
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
687696
'SQL Server 2008 R2 Service Pack 2 Express',
@@ -696,7 +705,7 @@ var
696705
PackedVersion: Int64;
697706
begin
698707
// https://www.microsoft.com/en-us/download/details.aspx?id=56042
699-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(11, 0, 7001, 0)) < 0) then begin
708+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(11, 0, 7001, 0)) < 0) then begin
700709
Dependency_Add('sql2012express' + Dependency_ArchSuffix + '.exe',
701710
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
702711
'SQL Server 2012 Service Pack 4 Express',
@@ -711,7 +720,7 @@ var
711720
PackedVersion: Int64;
712721
begin
713722
// https://www.microsoft.com/en-us/download/details.aspx?id=57473
714-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(12, 0, 6024, 0)) < 0) then begin
723+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(12, 0, 6024, 0)) < 0) then begin
715724
Dependency_Add('sql2014express' + Dependency_ArchSuffix + '.exe',
716725
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
717726
'SQL Server 2014 Service Pack 3 Express',
@@ -726,7 +735,7 @@ var
726735
PackedVersion: Int64;
727736
begin
728737
// https://www.microsoft.com/en-us/download/details.aspx?id=103447
729-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(13, 0, 6404, 1)) < 0) then begin
738+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(13, 0, 6404, 1)) < 0) then begin
730739
Dependency_Add('sql2016express' + Dependency_ArchSuffix + '.exe',
731740
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
732741
'SQL Server 2016 Service Pack 3 Express',
@@ -741,7 +750,7 @@ var
741750
PackedVersion: Int64;
742751
begin
743752
// https://www.microsoft.com/en-us/download/details.aspx?id=55994
744-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(14, 0, 0, 0)) < 0) then begin
753+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(14, 0, 0, 0)) < 0) then begin
745754
Dependency_Add('sql2017express' + Dependency_ArchSuffix + '.exe',
746755
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
747756
'SQL Server 2017 Express',
@@ -756,7 +765,7 @@ var
756765
PackedVersion: Int64;
757766
begin
758767
// https://www.microsoft.com/en-us/download/details.aspx?id=101064
759-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(15, 0, 0, 0)) < 0) then begin
768+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(15, 0, 0, 0)) < 0) then begin
760769
Dependency_Add('sql2019express' + Dependency_ArchSuffix + '.exe',
761770
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
762771
'SQL Server 2019 Express',
@@ -771,7 +780,7 @@ var
771780
PackedVersion: Int64;
772781
begin
773782
// https://www.microsoft.com/en-us/download/details.aspx?id=104781
774-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(16, 0, 1000, 6)) < 0) then begin
783+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(16, 0, 1000, 6)) < 0) then begin
775784
Dependency_Add('sql2022express' + Dependency_ArchSuffix + '.exe',
776785
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
777786
'SQL Server 2022 Express',
@@ -786,7 +795,7 @@ var
786795
PackedVersion: Int64;
787796
begin
788797
// https://www.microsoft.com/en-us/sql-server/sql-server-downloads
789-
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(17, 0, 1000, 7)) < 0) then begin
798+
if not RegQueryStringValue(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQLServer\CurrentVersion', 'CurrentVersion', Version) or not StrToVersion(Version, PackedVersion) or (ComparePackedVersion(PackedVersion, PackVersionComponents(17, 0, 1000, 7)) < 0) then begin
790799
Dependency_Add('sql2025express' + Dependency_ArchSuffix + '.exe',
791800
Dependency_PassiveOrQuiet('/QS', '/Q') + ' /IACCEPTSQLSERVERLICENSETERMS /ACTION=INSTALL /FEATURES=SQL /INSTANCENAME=MSSQLSERVER',
792801
'SQL Server 2025 Express',
@@ -798,7 +807,7 @@ end;
798807
procedure Dependency_AddSqlOleDb19;
799808
begin
800809
// https://learn.microsoft.com/en-us/sql/connect/oledb/download-oledb-driver-for-sql-server
801-
if not RegValueExists(HKLM, 'SOFTWARE\Microsoft\MSOLEDBSQL19', 'InstalledVersion') then begin
810+
if not RegValueExists(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\MSOLEDBSQL19', 'InstalledVersion') then begin
802811
Dependency_Add('msoledbsql' + Dependency_ArchSuffix + '.msi',
803812
'/qn /norestart IACCEPTMSOLEDBSQLLICENSETERMS=YES',
804813
'Microsoft OLE DB Driver 19 for SQL Server' + Dependency_ArchTitle,
@@ -810,7 +819,7 @@ end;
810819
procedure Dependency_AddSqlOdbc18;
811820
begin
812821
// https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
813-
if not RegKeyExists(HKLM, 'SOFTWARE\ODBC\ODBCINST.INI\ODBC Driver 18 for SQL Server') then begin
822+
if not RegKeyExists(Dependency_ArchHKLM, 'SOFTWARE\ODBC\ODBCINST.INI\ODBC Driver 18 for SQL Server') then begin
814823
Dependency_Add('msodbcsql' + Dependency_ArchSuffix + '.msi',
815824
'/qn /norestart IACCEPTMSODBCSQLLICENSETERMS=YES',
816825
'Microsoft ODBC Driver 18 for SQL Server' + Dependency_ArchTitle,
@@ -822,7 +831,7 @@ end;
822831
procedure Dependency_AddWebView2;
823832
begin
824833
// https://developer.microsoft.com/en-us/microsoft-edge/webview2
825-
if not (RegValueExists(HKLM, Dependency_String('SOFTWARE', 'SOFTWARE\WOW6432Node', 'SOFTWARE\WOW6432Node') + '\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv')
834+
if not (RegValueExists(HKLM32, 'SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv')
826835
or RegValueExists(HKCU, 'SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv')) then begin
827836
Dependency_Add('MicrosoftEdgeWebview2Setup.exe',
828837
'/silent /install',
@@ -835,7 +844,7 @@ end;
835844
procedure Dependency_AddAccessDatabaseEngine2016;
836845
begin
837846
// https://www.microsoft.com/en-us/download/details.aspx?id=54920
838-
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE') then begin
847+
if not RegKeyExists(Dependency_ArchHKLM, 'SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE') then begin
839848
Dependency_Add('AccessDatabaseEngine2016' + Dependency_ArchSuffix + '.exe',
840849
'/quiet',
841850
'Microsoft Access Database Engine 2016' + Dependency_ArchTitle,
@@ -847,7 +856,7 @@ end;
847856
procedure Dependency_AddVSTORuntime;
848857
begin
849858
// https://learn.microsoft.com/en-us/visualstudio/vsto/how-to-install-the-visual-studio-tools-for-office-runtime-redistributable
850-
if not RegKeyExists(HKLM, Dependency_String('SOFTWARE', 'SOFTWARE\WOW6432Node', 'SOFTWARE\WOW6432Node') + '\Microsoft\VSTO Runtime Setup\v4R') then begin
859+
if not RegKeyExists(HKLM32, 'SOFTWARE\Microsoft\VSTO Runtime Setup\v4R') then begin
851860
Dependency_Add('vstor_redist.exe',
852861
'/q /norestart',
853862
'Visual Studio 2010 Tools for Office Runtime',

0 commit comments

Comments
 (0)