diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-11-16 19:05:29 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-11-17 19:06:00 -0600 |
| commit | 7d45238e97c35ccea1f77be9065b9a3ed9213bfb (patch) | |
| tree | 92a482536f944347ab9be9f1321c400d900e1cc2 /src/engine/apply.cpp | |
| parent | 7a942746bc535d319bdfa7f17025347ac6913ba2 (diff) | |
| download | wix-7d45238e97c35ccea1f77be9065b9a3ed9213bfb.tar.gz wix-7d45238e97c35ccea1f77be9065b9a3ed9213bfb.tar.bz2 wix-7d45238e97c35ccea1f77be9065b9a3ed9213bfb.zip | |
Add logging and BA messages around MSI transactions.
Diffstat (limited to 'src/engine/apply.cpp')
| -rw-r--r-- | src/engine/apply.cpp | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/src/engine/apply.cpp b/src/engine/apply.cpp index 53422807..833d750c 100644 --- a/src/engine/apply.cpp +++ b/src/engine/apply.cpp | |||
| @@ -783,7 +783,7 @@ extern "C" HRESULT ApplyExecute( | |||
| 783 | if (pCheckpoint && pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) | 783 | if (pCheckpoint && pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) |
| 784 | { | 784 | { |
| 785 | hr = E_INVALIDSTATE; | 785 | hr = E_INVALIDSTATE; |
| 786 | LogString(REPORT_ERROR, "Ilegal state: Reboot requested within an MSI transaction. Transaction will rollback."); | 786 | LogId(REPORT_ERROR, MSG_RESTART_REQUEST_DURING_MSI_TRANSACTION, pCheckpoint->pActiveRollbackBoundary->sczId); |
| 787 | } | 787 | } |
| 788 | else | 788 | else |
| 789 | { | 789 | { |
| @@ -796,6 +796,8 @@ extern "C" HRESULT ApplyExecute( | |||
| 796 | // If rollback is disabled, keep what we have and always end execution here. | 796 | // If rollback is disabled, keep what we have and always end execution here. |
| 797 | if (pEngineState->plan.fDisableRollback) | 797 | if (pEngineState->plan.fDisableRollback) |
| 798 | { | 798 | { |
| 799 | LogId(REPORT_WARNING, MSG_PLAN_ROLLBACK_DISABLED); | ||
| 800 | |||
| 799 | if (pCheckpoint && pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) | 801 | if (pCheckpoint && pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) |
| 800 | { | 802 | { |
| 801 | hrRollback = ExecuteMsiCommitTransaction(pEngineState, pCheckpoint->pActiveRollbackBoundary, &context); | 803 | hrRollback = ExecuteMsiCommitTransaction(pEngineState, pCheckpoint->pActiveRollbackBoundary, &context); |
| @@ -1732,13 +1734,11 @@ static HRESULT DoExecuteAction( | |||
| 1732 | break; | 1734 | break; |
| 1733 | 1735 | ||
| 1734 | case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION: | 1736 | case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION: |
| 1735 | LogString(REPORT_STANDARD, "Starting a new MSI transaction\n"); | ||
| 1736 | hr = ExecuteMsiBeginTransaction(pEngineState, pExecuteAction->msiTransaction.pRollbackBoundary, pContext); | 1737 | hr = ExecuteMsiBeginTransaction(pEngineState, pExecuteAction->msiTransaction.pRollbackBoundary, pContext); |
| 1737 | ExitOnFailure(hr, "Failed to execute begin MSI transaction action."); | 1738 | ExitOnFailure(hr, "Failed to execute begin MSI transaction action."); |
| 1738 | break; | 1739 | break; |
| 1739 | 1740 | ||
| 1740 | case BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION: | 1741 | case BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION: |
| 1741 | LogString(REPORT_STANDARD, "Committing MSI transaction\n"); | ||
| 1742 | hr = ExecuteMsiCommitTransaction(pEngineState, pExecuteAction->msiTransaction.pRollbackBoundary, pContext); | 1742 | hr = ExecuteMsiCommitTransaction(pEngineState, pExecuteAction->msiTransaction.pRollbackBoundary, pContext); |
| 1743 | ExitOnFailure(hr, "Failed to execute commit MSI transaction action."); | 1743 | ExitOnFailure(hr, "Failed to execute commit MSI transaction action."); |
| 1744 | break; | 1744 | break; |
| @@ -1899,7 +1899,7 @@ static HRESULT ExecuteExePackage( | |||
| 1899 | fBeginCalled = TRUE; | 1899 | fBeginCalled = TRUE; |
| 1900 | 1900 | ||
| 1901 | // Send package execute begin to BA. | 1901 | // Send package execute begin to BA. |
| 1902 | hr = UserExperienceOnExecutePackageBegin(&pEngineState->userExperience, pExecuteAction->exePackage.pPackage->sczId, !fRollback, pExecuteAction->exePackage.action, INSTALLUILEVEL_NOCHANGE, false); | 1902 | hr = UserExperienceOnExecutePackageBegin(&pEngineState->userExperience, pExecuteAction->exePackage.pPackage->sczId, !fRollback, pExecuteAction->exePackage.action, INSTALLUILEVEL_NOCHANGE, FALSE); |
| 1903 | ExitOnRootFailure(hr, "BA aborted execute EXE package begin."); | 1903 | ExitOnRootFailure(hr, "BA aborted execute EXE package begin."); |
| 1904 | 1904 | ||
| 1905 | message.type = GENERIC_EXECUTE_MESSAGE_PROGRESS; | 1905 | message.type = GENERIC_EXECUTE_MESSAGE_PROGRESS; |
| @@ -2090,7 +2090,7 @@ static HRESULT ExecuteMsuPackage( | |||
| 2090 | fBeginCalled = TRUE; | 2090 | fBeginCalled = TRUE; |
| 2091 | 2091 | ||
| 2092 | // Send package execute begin to BA. | 2092 | // Send package execute begin to BA. |
| 2093 | hr = UserExperienceOnExecutePackageBegin(&pEngineState->userExperience, pExecuteAction->msuPackage.pPackage->sczId, !fRollback, pExecuteAction->msuPackage.action, INSTALLUILEVEL_NOCHANGE, false); | 2093 | hr = UserExperienceOnExecutePackageBegin(&pEngineState->userExperience, pExecuteAction->msuPackage.pPackage->sczId, !fRollback, pExecuteAction->msuPackage.action, INSTALLUILEVEL_NOCHANGE, FALSE); |
| 2094 | ExitOnRootFailure(hr, "BA aborted execute MSU package begin."); | 2094 | ExitOnRootFailure(hr, "BA aborted execute MSU package begin."); |
| 2095 | 2095 | ||
| 2096 | message.type = GENERIC_EXECUTE_MESSAGE_PROGRESS; | 2096 | message.type = GENERIC_EXECUTE_MESSAGE_PROGRESS; |
| @@ -2206,12 +2206,17 @@ static HRESULT ExecuteMsiBeginTransaction( | |||
| 2206 | ) | 2206 | ) |
| 2207 | { | 2207 | { |
| 2208 | HRESULT hr = S_OK; | 2208 | HRESULT hr = S_OK; |
| 2209 | BOOL fBeginCalled = FALSE; | ||
| 2209 | 2210 | ||
| 2210 | if (pRollbackBoundary->fActiveTransaction) | 2211 | if (pRollbackBoundary->fActiveTransaction) |
| 2211 | { | 2212 | { |
| 2212 | ExitFunction1(hr = E_INVALIDSTATE); | 2213 | ExitFunction1(hr = E_INVALIDSTATE); |
| 2213 | } | 2214 | } |
| 2214 | 2215 | ||
| 2216 | fBeginCalled = TRUE; | ||
| 2217 | hr = UserExperienceOnBeginMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); | ||
| 2218 | ExitOnRootFailure(hr, "BA aborted execute begin MSI transaction."); | ||
| 2219 | |||
| 2215 | if (pEngineState->plan.fPerMachine) | 2220 | if (pEngineState->plan.fPerMachine) |
| 2216 | { | 2221 | { |
| 2217 | hr = ElevationMsiBeginTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); | 2222 | hr = ElevationMsiBeginTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); |
| @@ -2228,6 +2233,11 @@ static HRESULT ExecuteMsiBeginTransaction( | |||
| 2228 | } | 2233 | } |
| 2229 | 2234 | ||
| 2230 | LExit: | 2235 | LExit: |
| 2236 | if (fBeginCalled) | ||
| 2237 | { | ||
| 2238 | UserExperienceOnBeginMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); | ||
| 2239 | } | ||
| 2240 | |||
| 2231 | return hr; | 2241 | return hr; |
| 2232 | } | 2242 | } |
| 2233 | 2243 | ||
| @@ -2238,20 +2248,25 @@ static HRESULT ExecuteMsiCommitTransaction( | |||
| 2238 | ) | 2248 | ) |
| 2239 | { | 2249 | { |
| 2240 | HRESULT hr = S_OK; | 2250 | HRESULT hr = S_OK; |
| 2251 | BOOL fBeginCalled = FALSE; | ||
| 2241 | 2252 | ||
| 2242 | if (!pRollbackBoundary->fActiveTransaction) | 2253 | if (!pRollbackBoundary->fActiveTransaction) |
| 2243 | { | 2254 | { |
| 2244 | ExitFunction1(hr = E_INVALIDSTATE); | 2255 | ExitFunction1(hr = E_INVALIDSTATE); |
| 2245 | } | 2256 | } |
| 2246 | 2257 | ||
| 2258 | fBeginCalled = TRUE; | ||
| 2259 | hr = UserExperienceOnCommitMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); | ||
| 2260 | ExitOnRootFailure(hr, "BA aborted execute commit MSI transaction."); | ||
| 2261 | |||
| 2247 | if (pEngineState->plan.fPerMachine) | 2262 | if (pEngineState->plan.fPerMachine) |
| 2248 | { | 2263 | { |
| 2249 | hr = ElevationMsiCommitTransaction(pEngineState->companionConnection.hPipe); | 2264 | hr = ElevationMsiCommitTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); |
| 2250 | ExitOnFailure(hr, "Failed to commit an elevated MSI transaction."); | 2265 | ExitOnFailure(hr, "Failed to commit an elevated MSI transaction."); |
| 2251 | } | 2266 | } |
| 2252 | else | 2267 | else |
| 2253 | { | 2268 | { |
| 2254 | hr = MsiEngineCommitTransaction(); | 2269 | hr = MsiEngineCommitTransaction(pRollbackBoundary->sczId); |
| 2255 | } | 2270 | } |
| 2256 | 2271 | ||
| 2257 | if (SUCCEEDED(hr)) | 2272 | if (SUCCEEDED(hr)) |
| @@ -2260,6 +2275,11 @@ static HRESULT ExecuteMsiCommitTransaction( | |||
| 2260 | } | 2275 | } |
| 2261 | 2276 | ||
| 2262 | LExit: | 2277 | LExit: |
| 2278 | if (fBeginCalled) | ||
| 2279 | { | ||
| 2280 | UserExperienceOnCommitMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); | ||
| 2281 | } | ||
| 2282 | |||
| 2263 | return hr; | 2283 | return hr; |
| 2264 | } | 2284 | } |
| 2265 | 2285 | ||
| @@ -2270,25 +2290,34 @@ static HRESULT ExecuteMsiRollbackTransaction( | |||
| 2270 | ) | 2290 | ) |
| 2271 | { | 2291 | { |
| 2272 | HRESULT hr = S_OK; | 2292 | HRESULT hr = S_OK; |
| 2293 | BOOL fBeginCalled = FALSE; | ||
| 2273 | 2294 | ||
| 2274 | if (!pRollbackBoundary->fActiveTransaction) | 2295 | if (!pRollbackBoundary->fActiveTransaction) |
| 2275 | { | 2296 | { |
| 2276 | ExitFunction(); | 2297 | ExitFunction(); |
| 2277 | } | 2298 | } |
| 2278 | 2299 | ||
| 2300 | fBeginCalled = TRUE; | ||
| 2301 | UserExperienceOnRollbackMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); | ||
| 2302 | |||
| 2279 | if (pEngineState->plan.fPerMachine) | 2303 | if (pEngineState->plan.fPerMachine) |
| 2280 | { | 2304 | { |
| 2281 | hr = ElevationMsiRollbackTransaction(pEngineState->companionConnection.hPipe); | 2305 | hr = ElevationMsiRollbackTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); |
| 2282 | ExitOnFailure(hr, "Failed to rollback an elevated MSI transaction."); | 2306 | ExitOnFailure(hr, "Failed to rollback an elevated MSI transaction."); |
| 2283 | } | 2307 | } |
| 2284 | else | 2308 | else |
| 2285 | { | 2309 | { |
| 2286 | hr = MsiEngineRollbackTransaction(); | 2310 | hr = MsiEngineRollbackTransaction(pRollbackBoundary->sczId); |
| 2287 | } | 2311 | } |
| 2288 | 2312 | ||
| 2289 | LExit: | 2313 | LExit: |
| 2290 | pRollbackBoundary->fActiveTransaction = FALSE; | 2314 | pRollbackBoundary->fActiveTransaction = FALSE; |
| 2291 | 2315 | ||
| 2316 | if (fBeginCalled) | ||
| 2317 | { | ||
| 2318 | UserExperienceOnRollbackMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); | ||
| 2319 | } | ||
| 2320 | |||
| 2292 | return hr; | 2321 | return hr; |
| 2293 | } | 2322 | } |
| 2294 | 2323 | ||
