diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-05-14 18:23:05 +1000 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-05-16 21:26:53 +1000 |
commit | 05781eabd0e71261959aabe27ab5ff2d3d859ca2 (patch) | |
tree | be48c354c90a73c7c8c3f1eeca1df26714de1c87 | |
parent | 49b650dcfd513dcda5913cebe32839d0b28fbc2e (diff) | |
download | wix-05781eabd0e71261959aabe27ab5ff2d3d859ca2.tar.gz wix-05781eabd0e71261959aabe27ab5ff2d3d859ca2.tar.bz2 wix-05781eabd0e71261959aabe27ab5ff2d3d859ca2.zip |
WIXFEAT:6164 Add WiuInitializeInternalUI.
-rw-r--r-- | src/dutil/inc/wiutil.h | 7 | ||||
-rw-r--r-- | src/dutil/wiutil.cpp | 35 |
2 files changed, 34 insertions, 8 deletions
diff --git a/src/dutil/inc/wiutil.h b/src/dutil/inc/wiutil.h index 4264b815..07f6b56c 100644 --- a/src/dutil/inc/wiutil.h +++ b/src/dutil/inc/wiutil.h | |||
@@ -330,10 +330,15 @@ HRESULT DAPI WiuEnableLog( | |||
330 | __in_z LPCWSTR wzLogFile, | 330 | __in_z LPCWSTR wzLogFile, |
331 | __in DWORD dwLogAttributes | 331 | __in DWORD dwLogAttributes |
332 | ); | 332 | ); |
333 | HRESULT DAPI WiuInitializeInternalUI( | ||
334 | __in INSTALLUILEVEL internalUILevel, | ||
335 | __in_opt HWND hwndParent, | ||
336 | __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext | ||
337 | ); | ||
333 | HRESULT DAPI WiuInitializeExternalUI( | 338 | HRESULT DAPI WiuInitializeExternalUI( |
334 | __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler, | 339 | __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler, |
335 | __in INSTALLUILEVEL internalUILevel, | 340 | __in INSTALLUILEVEL internalUILevel, |
336 | __in HWND hwndParent, | 341 | __in_opt HWND hwndParent, |
337 | __in LPVOID pvContext, | 342 | __in LPVOID pvContext, |
338 | __in BOOL fRollback, | 343 | __in BOOL fRollback, |
339 | __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext | 344 | __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext |
diff --git a/src/dutil/wiutil.cpp b/src/dutil/wiutil.cpp index 1a489d54..1b3dd317 100644 --- a/src/dutil/wiutil.cpp +++ b/src/dutil/wiutil.cpp | |||
@@ -715,10 +715,32 @@ LExit: | |||
715 | } | 715 | } |
716 | 716 | ||
717 | 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 | |||
718 | extern "C" HRESULT DAPI WiuInitializeExternalUI( | 740 | extern "C" HRESULT DAPI WiuInitializeExternalUI( |
719 | __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler, | 741 | __in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler, |
720 | __in INSTALLUILEVEL internalUILevel, | 742 | __in INSTALLUILEVEL internalUILevel, |
721 | __in HWND hwndParent, | 743 | __in_opt HWND hwndParent, |
722 | __in LPVOID pvContext, | 744 | __in LPVOID pvContext, |
723 | __in BOOL fRollback, | 745 | __in BOOL fRollback, |
724 | __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext | 746 | __in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext |
@@ -730,7 +752,7 @@ extern "C" HRESULT DAPI WiuInitializeExternalUI( | |||
730 | DWORD dwMessageFilter = INSTALLLOGMODE_INITIALIZE | INSTALLLOGMODE_TERMINATE | | 752 | DWORD dwMessageFilter = INSTALLLOGMODE_INITIALIZE | INSTALLLOGMODE_TERMINATE | |
731 | INSTALLLOGMODE_FATALEXIT | INSTALLLOGMODE_ERROR | INSTALLLOGMODE_WARNING | | 753 | INSTALLLOGMODE_FATALEXIT | INSTALLLOGMODE_ERROR | INSTALLLOGMODE_WARNING | |
732 | INSTALLLOGMODE_RESOLVESOURCE | INSTALLLOGMODE_OUTOFDISKSPACE | | 754 | INSTALLLOGMODE_RESOLVESOURCE | INSTALLLOGMODE_OUTOFDISKSPACE | |
733 | INSTALLLOGMODE_ACTIONSTART | INSTALLLOGMODE_ACTIONDATA | INSTALLLOGMODE_COMMONDATA| | 755 | INSTALLLOGMODE_ACTIONSTART | INSTALLLOGMODE_ACTIONDATA | INSTALLLOGMODE_COMMONDATA | |
734 | INSTALLLOGMODE_PROGRESS | INSTALLLOGMODE_FILESINUSE; | 756 | INSTALLLOGMODE_PROGRESS | INSTALLLOGMODE_FILESINUSE; |
735 | 757 | ||
736 | if (MAKEDWORD(0, 4) <= vdwMsiDllMajorMinor) | 758 | if (MAKEDWORD(0, 4) <= vdwMsiDllMajorMinor) |
@@ -738,15 +760,14 @@ extern "C" HRESULT DAPI WiuInitializeExternalUI( | |||
738 | dwMessageFilter |= INSTALLLOGMODE_RMFILESINUSE; | 760 | dwMessageFilter |= INSTALLLOGMODE_RMFILESINUSE; |
739 | } | 761 | } |
740 | 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 | |||
742 | pExecuteContext->fRollback = fRollback; | 767 | pExecuteContext->fRollback = fRollback; |
743 | pExecuteContext->pfnMessageHandler = pfnMessageHandler; | 768 | pExecuteContext->pfnMessageHandler = pfnMessageHandler; |
744 | pExecuteContext->pvContext = pvContext; | 769 | pExecuteContext->pvContext = pvContext; |
745 | 770 | ||
746 | // Wire the internal and external UI handler. | ||
747 | pExecuteContext->previousInstallUILevel = vpfnMsiSetInternalUI(internalUILevel, &hwndParent); | ||
748 | pExecuteContext->hwndPreviousParentWindow = hwndParent; | ||
749 | |||
750 | // If the external UI record is available (MSI version >= 3.1) use it but fall back to the standard external | 771 | // If the external UI record is available (MSI version >= 3.1) use it but fall back to the standard external |
751 | // UI handler if necesary. | 772 | // UI handler if necesary. |
752 | if (vpfnMsiSetExternalUIRecord) | 773 | if (vpfnMsiSetExternalUIRecord) |