summaryrefslogtreecommitdiff
path: root/src/burn/engine/msiengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/msiengine.cpp')
-rw-r--r--src/burn/engine/msiengine.cpp42
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
1141extern "C" HRESULT MsiEngineCommitTransaction( 1141extern "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
1152LExit: 1154LExit:
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
1157extern "C" HRESULT MsiEngineRollbackTransaction( 1173extern "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
1168LExit: 1186LExit:
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 {