@joebigelow / wix / commits / 05781eab

WIXFEAT:6164 Add WiuInitializeInternalUI.

Sean Hall committed May 14, 2020 at 18:23 UTC 05781eabd0e71261959aabe27ab5ff2d3d859ca2
2 files changed +34 -8
src/dutil/inc/wiutil.h
+6 -1
@@ -330,10 +330,15 @@ HRESULT DAPI WiuEnableLog(
330 __in_z LPCWSTR wzLogFile,
331 __in DWORD dwLogAttributes
332 );
333 +HRESULT DAPI WiuInitializeInternalUI(
334 + __in INSTALLUILEVEL internalUILevel,
335 + __in_opt HWND hwndParent,
336 + __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext
337 + );
338 HRESULT DAPI WiuInitializeExternalUI(
339 __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler,
340 __in INSTALLUILEVEL internalUILevel,
336 - __in HWND hwndParent,
341 + __in_opt HWND hwndParent,
342 __in LPVOID pvContext,
343 __in BOOL fRollback,
344 __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext
src/dutil/wiutil.cpp
+28 -7
@@ -715,10 +715,32 @@ LExit:
715 }
716
717
718 +extern "C" HRESULT DAPI WiuInitializeInternalUI(
719 + __in INSTALLUILEVEL internalUILevel,
720 + __in_opt HWND hwndParent,
721 + __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext
722 + )
723 +{
724 + HRESULT hr = S_OK;
725 +
726 + memset(pExecuteContext, 0, sizeof(WIU_MSI_EXECUTE_CONTEXT));
727 +
728 + pExecuteContext->previousInstallUILevel = vpfnMsiSetInternalUI(internalUILevel, &hwndParent);
729 + pExecuteContext->hwndPreviousParentWindow = hwndParent;
730 +
731 + if (INSTALLUILEVEL_NOCHANGE == pExecuteContext->previousInstallUILevel)
732 + {
733 + hr = E_INVALIDARG;
734 + }
735 +
736 + return hr;
737 +}
738 +
739 +
740 extern "C" HRESULT DAPI WiuInitializeExternalUI(
741 __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler,
742 __in INSTALLUILEVEL internalUILevel,
721 - __in HWND hwndParent,
743 + __in_opt HWND hwndParent,
744 __in LPVOID pvContext,
745 __in BOOL fRollback,
746 __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext
@@ -730,7 +752,7 @@ extern "C" HRESULT DAPI WiuInitializeExternalUI(
752 DWORD dwMessageFilter = INSTALLLOGMODE_INITIALIZE | INSTALLLOGMODE_TERMINATE |
753 INSTALLLOGMODE_FATALEXIT | INSTALLLOGMODE_ERROR | INSTALLLOGMODE_WARNING |
754 INSTALLLOGMODE_RESOLVESOURCE | INSTALLLOGMODE_OUTOFDISKSPACE |
733 - INSTALLLOGMODE_ACTIONSTART | INSTALLLOGMODE_ACTIONDATA | INSTALLLOGMODE_COMMONDATA|
755 + INSTALLLOGMODE_ACTIONSTART | INSTALLLOGMODE_ACTIONDATA | INSTALLLOGMODE_COMMONDATA |
756 INSTALLLOGMODE_PROGRESS | INSTALLLOGMODE_FILESINUSE;
757
758 if (MAKEDWORD(0, 4) <= vdwMsiDllMajorMinor)
@@ -738,15 +760,14 @@ extern "C" HRESULT DAPI WiuInitializeExternalUI(
760 dwMessageFilter |= INSTALLLOGMODE_RMFILESINUSE;
761 }
762
741 - memset(pExecuteContext, 0, sizeof(WIU_MSI_EXECUTE_CONTEXT));
763 + // Wire the internal and external UI handler.
764 + hr = WiuInitializeInternalUI(internalUILevel, hwndParent, pExecuteContext);
765 + ExitOnFailure(hr, "Failed to set internal UI level and window.");
766 +
767 pExecuteContext->fRollback = fRollback;
768 pExecuteContext->pfnMessageHandler = pfnMessageHandler;
769 pExecuteContext->pvContext = pvContext;
770
746 - // Wire the internal and external UI handler.
747 - pExecuteContext->previousInstallUILevel = vpfnMsiSetInternalUI(internalUILevel, &hwndParent);
748 - pExecuteContext->hwndPreviousParentWindow = hwndParent;
749 -
771 // If the external UI record is available (MSI version >= 3.1) use it but fall back to the standard external
772 // UI handler if necesary.
773 if (vpfnMsiSetExternalUIRecord)