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) |
