Sfoglia il codice sorgente

Fix HandleDuplicateDisplayNames for 32-bit Windows.

Martijn Laan 6 anni fa
parent
commit
2cdc5acac3
1 ha cambiato i file con 22 aggiunte e 19 eliminazioni
  1. 22 19
      Projects/Install.pas

+ 22 - 19
Projects/Install.pas

@@ -537,8 +537,8 @@ var
     begin
     begin
       { Check opposite administrative install mode. }
       { Check opposite administrative install mode. }
       ExistingAtOppositeAdminInstallMode := ExistingInstallationAt(RegView, OppositeRootKey);
       ExistingAtOppositeAdminInstallMode := ExistingInstallationAt(RegView, OppositeRootKey);
-      if RootKeyIsHKLM then begin
-        { Opposite (HKCU) is shared for 32-bit and 64-bit so don't log bitness. }
+      if RootKeyIsHKLM or not IsWin64 then begin
+        { Opposite (HKCU) is shared for 32-bit and 64-bit so don't log bitness. Also don't log bitness on a 32-bit system. }
         LogFmt('Detected previous %s install? %s',
         LogFmt('Detected previous %s install? %s',
           [AdminInstallModeNames[OppositeRootKeyIsHKLM {always False}], SYesNo[ExistingAtOppositeAdminInstallMode]])
           [AdminInstallModeNames[OppositeRootKeyIsHKLM {always False}], SYesNo[ExistingAtOppositeAdminInstallMode]])
       end else begin
       end else begin
@@ -547,23 +547,26 @@ var
           [AdminInstallModeNames[OppositeRootKeyIsHKLM {always True}], BitInstallModeNames[RegViewIs64Bit], SYesNo[ExistingAtOppositeAdminInstallMode]]);
           [AdminInstallModeNames[OppositeRootKeyIsHKLM {always True}], BitInstallModeNames[RegViewIs64Bit], SYesNo[ExistingAtOppositeAdminInstallMode]]);
       end;
       end;
 
 
-      { Check opposite 32-bit or 64-bit install mode. }
-      if RootKeyIsHKLM then begin
-        { HKLM is not shared for 32-bit and 64-bit so check it for opposite 32-bit or 64-bit install mode. Not checking HKCU
-          since HKCU is shared for 32-bit and 64-bit mode and we already checked HKCU above. }
-        ExistingAtOpposite64BitInstallMode := ExistingInstallationAt(OppositeRegView, RootKey {always HKLM});
-        LogFmt('Detected previous %s %s install? %s',
-          [AdminInstallModeNames[RootKeyIsHKLM {always True}], BitInstallModeNames[OppositeRegViewIs64Bit], SYesNo[ExistingAtOpposite64BitInstallMode]]);
-      end else begin
-        { HKCU is shared for 32-bit and 64-bit so not checking it but we do still need to check HKLM for opposite 32-bit or
-          64-bit install mode since we haven't already done that. }
-        ExistingAtOpposite64BitInstallMode := ExistingInstallationAt(OppositeRegView, OppositeRootKey {always HKLM});
-        if ExistingAtOpposite64BitInstallMode then
-          ExistingAtOppositeAdminInstallMode := True;
-        LogFmt('Detected previous %s %s install? %s',
-          [AdminInstallModeNames[OppositeRootKeyIsHKLM {always True}], BitInstallModeNames[OppositeRegViewIs64Bit], SYesNo[ExistingAtOpposite64BitInstallMode]]);
-      end;
-
+      if IsWin64 then begin
+        { Check opposite 32-bit or 64-bit install mode. }
+        if RootKeyIsHKLM then begin
+          { HKLM is not shared for 32-bit and 64-bit so check it for opposite 32-bit or 64-bit install mode. Not checking HKCU
+            since HKCU is shared for 32-bit and 64-bit mode and we already checked HKCU above. }
+          ExistingAtOpposite64BitInstallMode := ExistingInstallationAt(OppositeRegView, RootKey {always HKLM});
+          LogFmt('Detected previous %s %s install? %s',
+            [AdminInstallModeNames[RootKeyIsHKLM {always True}], BitInstallModeNames[OppositeRegViewIs64Bit], SYesNo[ExistingAtOpposite64BitInstallMode]]);
+        end else begin
+          { HKCU is shared for 32-bit and 64-bit so not checking it but we do still need to check HKLM for opposite 32-bit or
+            64-bit install mode since we haven't already done that. }
+          ExistingAtOpposite64BitInstallMode := ExistingInstallationAt(OppositeRegView, OppositeRootKey {always HKLM});
+          if ExistingAtOpposite64BitInstallMode then
+            ExistingAtOppositeAdminInstallMode := True;
+          LogFmt('Detected previous %s %s install? %s',
+            [AdminInstallModeNames[OppositeRootKeyIsHKLM {always True}], BitInstallModeNames[OppositeRegViewIs64Bit], SYesNo[ExistingAtOpposite64BitInstallMode]]);
+        end;
+      end else
+        ExistingAtOpposite64BitInstallMode := False;
+      
       { Mark new display name if needed. Note: currently we don't attempt to mark existing display names as well. }
       { Mark new display name if needed. Note: currently we don't attempt to mark existing display names as well. }
       if ExistingAtOppositeAdminInstallMode or ExistingAtOpposite64BitInstallMode then begin
       if ExistingAtOppositeAdminInstallMode or ExistingAtOpposite64BitInstallMode then begin
         if ExistingAtOppositeAdminInstallMode and ExistingAtOpposite64BitInstallMode then
         if ExistingAtOppositeAdminInstallMode and ExistingAtOpposite64BitInstallMode then