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;