@joebigelow / wix-1 / commits / dd048955

Release taskbar before COM uninitialized to prevent crash

Fixes wixtoolset/issues#5966

Rob Mensching committed Apr 12, 2021 at 10:55 UTC dd04895571894674e356cce1cab259758e9a87f2
1 file changed +13 -1
src/wixstdba/WixStandardBootstrapperApplication.cpp
+13 -1
@@ -1894,6 +1894,7 @@ private: // privates
1894 LExit:
1895 // destroy main window
1896 pThis->DestroyMainWindow();
1897 + pThis->UninitializeTaskbarButton();
1898
1899 // initiate engine shutdown
1900 DWORD dwQuit = HRESULT_CODE(hr);
@@ -2556,6 +2557,17 @@ private: // privates
2557 }
2558 }
2559
2560 +
2561 + //
2562 + // UninitializeTaskbarButton - clean up the taskbar registration.
2563 + //
2564 + void UninitializeTaskbarButton()
2565 + {
2566 + m_fTaskbarButtonOK = FALSE;
2567 + ReleaseNullObject(m_pTaskbarList);
2568 + }
2569 +
2570 +
2571 static LRESULT CallDefaultWndProc(
2572 __in CWixStandardBootstrapperApplication* pBA,
2573 __in HWND hWnd,
@@ -3857,6 +3869,7 @@ public:
3869 ~CWixStandardBootstrapperApplication()
3870 {
3871 AssertSz(!::IsWindow(m_hWnd), "Window should have been destroyed before destructor.");
3872 + AssertSz(!m_pTaskbarList, "Taskbar should have been released before destructor.");
3873 AssertSz(!m_pTheme, "Theme should have been released before destructor.");
3874
3875 for (DWORD i = 0; i < m_Bundle.packages.cPackages; ++i)
@@ -3865,7 +3878,6 @@ public:
3878 }
3879
3880 ::DeleteCriticalSection(&m_csShowingInternalUiThisPackage);
3868 - ReleaseObject(m_pTaskbarList);
3881 ReleaseDict(m_sdOverridableVariables);
3882 ReleaseStr(m_sczFailedMessage);
3883 ReleaseStr(m_sczConfirmCloseMessage);