@joebigelow / wix-1 / commits / d88d1176

Hold a reference to validation callback until the external UI resets

Rob Mensching committed Feb 7, 2022 at 22:00 UTC d88d117691cf229a695307269c063f7fcc27c577
1 file changed +6 -1
src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs
+6 -1
@@ -18,6 +18,8 @@ namespace WixToolset.Core.Native
18 {
19 private const string CubesFolder = "cubes";
20
21 + private readonly InstallUIHandler validationUIHandlerDelegate;
22 +
23 /// <summary>
24 /// Creates a new Windows Installer validator.
25 /// </summary>
@@ -33,6 +35,9 @@ namespace WixToolset.Core.Native
35 this.CubeFiles = cubeFiles;
36 this.Ices = new SortedSet<string>(ices);
37 this.SuppressedIces = new SortedSet<string>(suppressedIces);
38 +
39 + // Hold a reference to our callback beyond when the external UI handler is reset.
40 + this.validationUIHandlerDelegate = new InstallUIHandler(this.ValidationUIHandler);
41 }
42
43 private IWindowsInstallerValidatorCallback Callback { get; }
@@ -175,7 +180,7 @@ namespace WixToolset.Core.Native
180
181 // Disable the internal UI handler and set an external UI handler.
182 previousUILevel = Installer.SetInternalUI((int)InstallUILevels.None, ref previousHwnd);
178 - previousUIHandler = Installer.SetExternalUI(this.ValidationUIHandler, (int)InstallLogModes.Error | (int)InstallLogModes.Warning | (int)InstallLogModes.User, IntPtr.Zero);
183 + previousUIHandler = Installer.SetExternalUI(this.validationUIHandlerDelegate, (int)InstallLogModes.Error | (int)InstallLogModes.Warning | (int)InstallLogModes.User, IntPtr.Zero);
184
185 // Create a session for running the ICEs.
186 this.ValidationSessionInProgress = true;