diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-01-14 21:37:24 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-01-16 10:30:28 -0600 |
| commit | da1d1376953ef1c9afb32d5eee02b785e52e372e (patch) | |
| tree | 0df8550960259d7b13f5cd90f04d21b5576f16b7 /src/burn/engine/userexperience.cpp | |
| parent | abe316b80fae80eba54b0b79e76b6362105fa098 (diff) | |
| download | wix-da1d1376953ef1c9afb32d5eee02b785e52e372e.tar.gz wix-da1d1376953ef1c9afb32d5eee02b785e52e372e.tar.bz2 wix-da1d1376953ef1c9afb32d5eee02b785e52e372e.zip | |
Remove orphan compatible MSI packages.
Reimplements #3190
Diffstat (limited to 'src/burn/engine/userexperience.cpp')
| -rw-r--r-- | src/burn/engine/userexperience.cpp | 118 |
1 files changed, 117 insertions, 1 deletions
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp index 6ea16905..1439f5f2 100644 --- a/src/burn/engine/userexperience.cpp +++ b/src/burn/engine/userexperience.cpp | |||
| @@ -104,7 +104,7 @@ extern "C" HRESULT UserExperienceLoad( | |||
| 104 | args.pCommand = pCommand; | 104 | args.pCommand = pCommand; |
| 105 | args.pfnBootstrapperEngineProc = EngineForApplicationProc; | 105 | args.pfnBootstrapperEngineProc = EngineForApplicationProc; |
| 106 | args.pvBootstrapperEngineProcContext = pEngineContext; | 106 | args.pvBootstrapperEngineProcContext = pEngineContext; |
| 107 | args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 12, 30, 0); | 107 | args.qwEngineAPIVersion = MAKEQWORDVERSION(2022, 1, 10, 0); |
| 108 | 108 | ||
| 109 | results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); | 109 | results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); |
| 110 | 110 | ||
| @@ -1015,6 +1015,36 @@ LExit: | |||
| 1015 | return hr; | 1015 | return hr; |
| 1016 | } | 1016 | } |
| 1017 | 1017 | ||
| 1018 | EXTERN_C BAAPI UserExperienceOnDetectCompatibleMsiPackage( | ||
| 1019 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
| 1020 | __in_z LPCWSTR wzPackageId, | ||
| 1021 | __in_z LPCWSTR wzCompatiblePackageId, | ||
| 1022 | __in VERUTIL_VERSION* pCompatiblePackageVersion | ||
| 1023 | ) | ||
| 1024 | { | ||
| 1025 | HRESULT hr = S_OK; | ||
| 1026 | BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS args = { }; | ||
| 1027 | BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS results = { }; | ||
| 1028 | |||
| 1029 | args.cbSize = sizeof(args); | ||
| 1030 | args.wzPackageId = wzPackageId; | ||
| 1031 | args.wzCompatiblePackageId = wzCompatiblePackageId; | ||
| 1032 | args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion; | ||
| 1033 | |||
| 1034 | results.cbSize = sizeof(results); | ||
| 1035 | |||
| 1036 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE, &args, &results); | ||
| 1037 | ExitOnFailure(hr, "BA OnDetectCompatibleMsiPackage failed."); | ||
| 1038 | |||
| 1039 | if (results.fCancel) | ||
| 1040 | { | ||
| 1041 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
| 1042 | } | ||
| 1043 | |||
| 1044 | LExit: | ||
| 1045 | return hr; | ||
| 1046 | } | ||
| 1047 | |||
| 1018 | EXTERN_C BAAPI UserExperienceOnDetectComplete( | 1048 | EXTERN_C BAAPI UserExperienceOnDetectComplete( |
| 1019 | __in BURN_USER_EXPERIENCE* pUserExperience, | 1049 | __in BURN_USER_EXPERIENCE* pUserExperience, |
| 1020 | __in HRESULT hrStatus, | 1050 | __in HRESULT hrStatus, |
| @@ -1798,6 +1828,67 @@ LExit: | |||
| 1798 | return hr; | 1828 | return hr; |
| 1799 | } | 1829 | } |
| 1800 | 1830 | ||
| 1831 | EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin( | ||
| 1832 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
| 1833 | __in_z LPCWSTR wzPackageId, | ||
| 1834 | __in_z LPCWSTR wzCompatiblePackageId, | ||
| 1835 | __in VERUTIL_VERSION* pCompatiblePackageVersion, | ||
| 1836 | __inout BOOL* pfRequested | ||
| 1837 | ) | ||
| 1838 | { | ||
| 1839 | HRESULT hr = S_OK; | ||
| 1840 | BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS args = { }; | ||
| 1841 | BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS results = { }; | ||
| 1842 | |||
| 1843 | args.cbSize = sizeof(args); | ||
| 1844 | args.wzPackageId = wzPackageId; | ||
| 1845 | args.wzCompatiblePackageId = wzCompatiblePackageId; | ||
| 1846 | args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion; | ||
| 1847 | args.fRecommendedRemove = *pfRequested; | ||
| 1848 | |||
| 1849 | results.cbSize = sizeof(results); | ||
| 1850 | results.fRequestRemove = *pfRequested; | ||
| 1851 | |||
| 1852 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN, &args, &results); | ||
| 1853 | ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageBegin failed."); | ||
| 1854 | |||
| 1855 | if (results.fCancel) | ||
| 1856 | { | ||
| 1857 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
| 1858 | } | ||
| 1859 | *pfRequested = results.fRequestRemove; | ||
| 1860 | |||
| 1861 | LExit: | ||
| 1862 | return hr; | ||
| 1863 | } | ||
| 1864 | |||
| 1865 | EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete( | ||
| 1866 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
| 1867 | __in_z LPCWSTR wzPackageId, | ||
| 1868 | __in_z LPCWSTR wzCompatiblePackageId, | ||
| 1869 | __in HRESULT hrStatus, | ||
| 1870 | __in BOOL fRequested | ||
| 1871 | ) | ||
| 1872 | { | ||
| 1873 | HRESULT hr = S_OK; | ||
| 1874 | BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS args = { }; | ||
| 1875 | BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS results = { }; | ||
| 1876 | |||
| 1877 | args.cbSize = sizeof(args); | ||
| 1878 | args.wzPackageId = wzPackageId; | ||
| 1879 | args.wzCompatiblePackageId = wzCompatiblePackageId; | ||
| 1880 | args.hrStatus = hrStatus; | ||
| 1881 | args.fRequestedRemove = fRequested; | ||
| 1882 | |||
| 1883 | results.cbSize = sizeof(results); | ||
| 1884 | |||
| 1885 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE, &args, &results); | ||
| 1886 | ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageComplete failed."); | ||
| 1887 | |||
| 1888 | LExit: | ||
| 1889 | return hr; | ||
| 1890 | } | ||
| 1891 | |||
| 1801 | EXTERN_C BAAPI UserExperienceOnPlanMsiFeature( | 1892 | EXTERN_C BAAPI UserExperienceOnPlanMsiFeature( |
| 1802 | __in BURN_USER_EXPERIENCE* pUserExperience, | 1893 | __in BURN_USER_EXPERIENCE* pUserExperience, |
| 1803 | __in_z LPCWSTR wzPackageId, | 1894 | __in_z LPCWSTR wzPackageId, |
| @@ -1932,6 +2023,31 @@ LExit: | |||
| 1932 | return hr; | 2023 | return hr; |
| 1933 | } | 2024 | } |
| 1934 | 2025 | ||
| 2026 | EXTERN_C BAAPI UserExperienceOnPlannedCompatiblePackage( | ||
| 2027 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
| 2028 | __in_z LPCWSTR wzPackageId, | ||
| 2029 | __in_z LPCWSTR wzCompatiblePackageId, | ||
| 2030 | __in BOOL fRemove | ||
| 2031 | ) | ||
| 2032 | { | ||
| 2033 | HRESULT hr = S_OK; | ||
| 2034 | BA_ONPLANNEDCOMPATIBLEPACKAGE_ARGS args = { }; | ||
| 2035 | BA_ONPLANNEDCOMPATIBLEPACKAGE_RESULTS results = { }; | ||
| 2036 | |||
| 2037 | args.cbSize = sizeof(args); | ||
| 2038 | args.wzPackageId = wzPackageId; | ||
| 2039 | args.wzCompatiblePackageId = wzCompatiblePackageId; | ||
| 2040 | args.fRemove = fRemove; | ||
| 2041 | |||
| 2042 | results.cbSize = sizeof(results); | ||
| 2043 | |||
| 2044 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANNEDCOMPATIBLEPACKAGE, &args, &results); | ||
| 2045 | ExitOnFailure(hr, "BA OnPlannedCompatiblePackage failed."); | ||
| 2046 | |||
| 2047 | LExit: | ||
| 2048 | return hr; | ||
| 2049 | } | ||
| 2050 | |||
| 1935 | EXTERN_C BAAPI UserExperienceOnPlannedPackage( | 2051 | EXTERN_C BAAPI UserExperienceOnPlannedPackage( |
| 1936 | __in BURN_USER_EXPERIENCE* pUserExperience, | 2052 | __in BURN_USER_EXPERIENCE* pUserExperience, |
| 1937 | __in_z LPCWSTR wzPackageId, | 2053 | __in_z LPCWSTR wzPackageId, |
