diff options
author | Rob Mensching <rob@firegiant.com> | 2021-04-12 10:55:43 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2021-04-12 15:21:05 -0700 |
commit | dd04895571894674e356cce1cab259758e9a87f2 (patch) | |
tree | 5401395451753402747093ee6480f417bcad49c0 /src | |
parent | 3799e0593c4ec384ed16205386e60803ff9afb3c (diff) | |
download | wix-dd04895571894674e356cce1cab259758e9a87f2.tar.gz wix-dd04895571894674e356cce1cab259758e9a87f2.tar.bz2 wix-dd04895571894674e356cce1cab259758e9a87f2.zip |
Release taskbar before COM uninitialized to prevent crash
Fixes wixtoolset/issues#5966
Diffstat (limited to 'src')
-rw-r--r-- | src/wixstdba/WixStandardBootstrapperApplication.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/wixstdba/WixStandardBootstrapperApplication.cpp b/src/wixstdba/WixStandardBootstrapperApplication.cpp index 0fcf3a21..f690c1a6 100644 --- a/src/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/wixstdba/WixStandardBootstrapperApplication.cpp | |||
@@ -1894,6 +1894,7 @@ private: // privates | |||
1894 | LExit: | 1894 | LExit: |
1895 | // destroy main window | 1895 | // destroy main window |
1896 | pThis->DestroyMainWindow(); | 1896 | pThis->DestroyMainWindow(); |
1897 | pThis->UninitializeTaskbarButton(); | ||
1897 | 1898 | ||
1898 | // initiate engine shutdown | 1899 | // initiate engine shutdown |
1899 | DWORD dwQuit = HRESULT_CODE(hr); | 1900 | DWORD dwQuit = HRESULT_CODE(hr); |
@@ -2556,6 +2557,17 @@ private: // privates | |||
2556 | } | 2557 | } |
2557 | } | 2558 | } |
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 | |||
2559 | static LRESULT CallDefaultWndProc( | 2571 | static LRESULT CallDefaultWndProc( |
2560 | __in CWixStandardBootstrapperApplication* pBA, | 2572 | __in CWixStandardBootstrapperApplication* pBA, |
2561 | __in HWND hWnd, | 2573 | __in HWND hWnd, |
@@ -3857,6 +3869,7 @@ public: | |||
3857 | ~CWixStandardBootstrapperApplication() | 3869 | ~CWixStandardBootstrapperApplication() |
3858 | { | 3870 | { |
3859 | AssertSz(!::IsWindow(m_hWnd), "Window should have been destroyed before destructor."); | 3871 | AssertSz(!::IsWindow(m_hWnd), "Window should have been destroyed before destructor."); |
3872 | AssertSz(!m_pTaskbarList, "Taskbar should have been released before destructor."); | ||
3860 | AssertSz(!m_pTheme, "Theme should have been released before destructor."); | 3873 | AssertSz(!m_pTheme, "Theme should have been released before destructor."); |
3861 | 3874 | ||
3862 | for (DWORD i = 0; i < m_Bundle.packages.cPackages; ++i) | 3875 | for (DWORD i = 0; i < m_Bundle.packages.cPackages; ++i) |
@@ -3865,7 +3878,6 @@ public: | |||
3865 | } | 3878 | } |
3866 | 3879 | ||
3867 | ::DeleteCriticalSection(&m_csShowingInternalUiThisPackage); | 3880 | ::DeleteCriticalSection(&m_csShowingInternalUiThisPackage); |
3868 | ReleaseObject(m_pTaskbarList); | ||
3869 | ReleaseDict(m_sdOverridableVariables); | 3881 | ReleaseDict(m_sdOverridableVariables); |
3870 | ReleaseStr(m_sczFailedMessage); | 3882 | ReleaseStr(m_sczFailedMessage); |
3871 | ReleaseStr(m_sczConfirmCloseMessage); | 3883 | ReleaseStr(m_sczConfirmCloseMessage); |