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)