diff options
author | Nir Bar <nir.bar@panel-sw.co.il> | 2022-12-06 13:22:41 +0200 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-12-12 21:50:39 -0600 |
commit | 50e24e9cf2084b6cb67b5d8fc509163061408bb6 (patch) | |
tree | 05c9df57480eb6308c3462c13847b43288f9dbb4 /src/burn/engine/msiengine.cpp | |
parent | c54f3083489827a1e57c6fd7f3d76f62ddc6e85e (diff) | |
download | wix-50e24e9cf2084b6cb67b5d8fc509163061408bb6.tar.gz wix-50e24e9cf2084b6cb67b5d8fc509163061408bb6.tar.bz2 wix-50e24e9cf2084b6cb67b5d8fc509163061408bb6.zip |
Use MSI transaction end result to detect whether reboot is needed
Diffstat (limited to 'src/burn/engine/msiengine.cpp')
-rw-r--r-- | src/burn/engine/msiengine.cpp | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/src/burn/engine/msiengine.cpp b/src/burn/engine/msiengine.cpp index 2c1b0d4f..fec995e0 100644 --- a/src/burn/engine/msiengine.cpp +++ b/src/burn/engine/msiengine.cpp | |||
@@ -1139,33 +1139,65 @@ LExit: | |||
1139 | } | 1139 | } |
1140 | 1140 | ||
1141 | extern "C" HRESULT MsiEngineCommitTransaction( | 1141 | extern "C" HRESULT MsiEngineCommitTransaction( |
1142 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary | 1142 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary, |
1143 | __out BOOTSTRAPPER_APPLY_RESTART* pRestart | ||
1143 | ) | 1144 | ) |
1144 | { | 1145 | { |
1145 | HRESULT hr = S_OK; | 1146 | HRESULT hr = S_OK; |
1147 | WIU_RESTART restart = WIU_RESTART_NONE; | ||
1146 | 1148 | ||
1147 | LogId(REPORT_STANDARD, MSG_MSI_TRANSACTION_COMMIT, pRollbackBoundary->sczId); | 1149 | LogId(REPORT_STANDARD, MSG_MSI_TRANSACTION_COMMIT, pRollbackBoundary->sczId); |
1148 | 1150 | ||
1149 | hr = WiuEndTransaction(MSITRANSACTIONSTATE_COMMIT, WIU_LOG_DEFAULT | INSTALLLOGMODE_VERBOSE, pRollbackBoundary->sczLogPath); | 1151 | hr = WiuEndTransaction(MSITRANSACTIONSTATE_COMMIT, WIU_LOG_DEFAULT | INSTALLLOGMODE_VERBOSE, pRollbackBoundary->sczLogPath, &restart); |
1150 | ExitOnFailure(hr, "Failed to commit the MSI transaction"); | 1152 | ExitOnFailure(hr, "Failed to commit the MSI transaction"); |
1151 | 1153 | ||
1152 | LExit: | 1154 | LExit: |
1155 | switch (restart) | ||
1156 | { | ||
1157 | case WIU_RESTART_NONE: | ||
1158 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_NONE; | ||
1159 | break; | ||
1160 | |||
1161 | case WIU_RESTART_REQUIRED: | ||
1162 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_REQUIRED; | ||
1163 | break; | ||
1164 | |||
1165 | case WIU_RESTART_INITIATED: | ||
1166 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_INITIATED; | ||
1167 | break; | ||
1168 | } | ||
1153 | 1169 | ||
1154 | return hr; | 1170 | return hr; |
1155 | } | 1171 | } |
1156 | 1172 | ||
1157 | extern "C" HRESULT MsiEngineRollbackTransaction( | 1173 | extern "C" HRESULT MsiEngineRollbackTransaction( |
1158 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary | 1174 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary, |
1175 | __out BOOTSTRAPPER_APPLY_RESTART* pRestart | ||
1159 | ) | 1176 | ) |
1160 | { | 1177 | { |
1161 | HRESULT hr = S_OK; | 1178 | HRESULT hr = S_OK; |
1179 | WIU_RESTART restart = WIU_RESTART_NONE; | ||
1162 | 1180 | ||
1163 | LogId(REPORT_WARNING, MSG_MSI_TRANSACTION_ROLLBACK, pRollbackBoundary->sczId); | 1181 | LogId(REPORT_WARNING, MSG_MSI_TRANSACTION_ROLLBACK, pRollbackBoundary->sczId); |
1164 | 1182 | ||
1165 | hr = WiuEndTransaction(MSITRANSACTIONSTATE_ROLLBACK, WIU_LOG_DEFAULT | INSTALLLOGMODE_VERBOSE, pRollbackBoundary->sczLogPath); | 1183 | hr = WiuEndTransaction(MSITRANSACTIONSTATE_ROLLBACK, WIU_LOG_DEFAULT | INSTALLLOGMODE_VERBOSE, pRollbackBoundary->sczLogPath, &restart); |
1166 | ExitOnFailure(hr, "Failed to rollback the MSI transaction"); | 1184 | ExitOnFailure(hr, "Failed to rollback the MSI transaction"); |
1167 | 1185 | ||
1168 | LExit: | 1186 | LExit: |
1187 | switch (restart) | ||
1188 | { | ||
1189 | case WIU_RESTART_NONE: | ||
1190 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_NONE; | ||
1191 | break; | ||
1192 | |||
1193 | case WIU_RESTART_REQUIRED: | ||
1194 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_REQUIRED; | ||
1195 | break; | ||
1196 | |||
1197 | case WIU_RESTART_INITIATED: | ||
1198 | *pRestart = BOOTSTRAPPER_APPLY_RESTART_INITIATED; | ||
1199 | break; | ||
1200 | } | ||
1169 | 1201 | ||
1170 | return hr; | 1202 | return hr; |
1171 | } | 1203 | } |
@@ -1246,7 +1278,7 @@ extern "C" HRESULT MsiEngineExecutePackage( | |||
1246 | 1278 | ||
1247 | // Best effort to set the execute package action variable. | 1279 | // Best effort to set the execute package action variable. |
1248 | VariableSetNumeric(pVariables, BURN_BUNDLE_EXECUTE_PACKAGE_ACTION, pExecuteAction->msiPackage.action, TRUE); | 1280 | VariableSetNumeric(pVariables, BURN_BUNDLE_EXECUTE_PACKAGE_ACTION, pExecuteAction->msiPackage.action, TRUE); |
1249 | 1281 | ||
1250 | // Wire up the external UI handler and logging. | 1282 | // Wire up the external UI handler and logging. |
1251 | if (pExecuteAction->msiPackage.fDisableExternalUiHandler) | 1283 | if (pExecuteAction->msiPackage.fDisableExternalUiHandler) |
1252 | { | 1284 | { |