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