From d88d117691cf229a695307269c063f7fcc27c577 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Mon, 7 Feb 2022 22:00:43 -0800 Subject: Hold a reference to validation callback until the external UI resets --- src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs b/src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs index 8f2adf54..39242577 100644 --- a/src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs +++ b/src/wix/WixToolset.Core.Native/WindowsInstallerValidator.cs @@ -18,6 +18,8 @@ namespace WixToolset.Core.Native { private const string CubesFolder = "cubes"; + private readonly InstallUIHandler validationUIHandlerDelegate; + /// /// Creates a new Windows Installer validator. /// @@ -33,6 +35,9 @@ namespace WixToolset.Core.Native this.CubeFiles = cubeFiles; this.Ices = new SortedSet(ices); this.SuppressedIces = new SortedSet(suppressedIces); + + // Hold a reference to our callback beyond when the external UI handler is reset. + this.validationUIHandlerDelegate = new InstallUIHandler(this.ValidationUIHandler); } private IWindowsInstallerValidatorCallback Callback { get; } @@ -175,7 +180,7 @@ namespace WixToolset.Core.Native // Disable the internal UI handler and set an external UI handler. previousUILevel = Installer.SetInternalUI((int)InstallUILevels.None, ref previousHwnd); - previousUIHandler = Installer.SetExternalUI(this.ValidationUIHandler, (int)InstallLogModes.Error | (int)InstallLogModes.Warning | (int)InstallLogModes.User, IntPtr.Zero); + previousUIHandler = Installer.SetExternalUI(this.validationUIHandlerDelegate, (int)InstallLogModes.Error | (int)InstallLogModes.Warning | (int)InstallLogModes.User, IntPtr.Zero); // Create a session for running the ICEs. this.ValidationSessionInProgress = true; -- cgit v1.2.3-55-g6feb