summaryrefslogtreecommitdiff
path: root/src/burn/engine/userexperience.cpp
diff options
context:
space:
mode:
authorNir Bar <nir.bar@panel-sw.co.il>2022-12-06 13:22:41 +0200
committerSean Hall <r.sean.hall@gmail.com>2022-12-12 21:50:39 -0600
commit50e24e9cf2084b6cb67b5d8fc509163061408bb6 (patch)
tree05c9df57480eb6308c3462c13847b43288f9dbb4 /src/burn/engine/userexperience.cpp
parentc54f3083489827a1e57c6fd7f3d76f62ddc6e85e (diff)
downloadwix-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/userexperience.cpp')
-rw-r--r--src/burn/engine/userexperience.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp
index 28429394..372ca901 100644
--- a/src/burn/engine/userexperience.cpp
+++ b/src/burn/engine/userexperience.cpp
@@ -35,7 +35,7 @@ static HRESULT SendBAMessageFromInactiveEngine(
35// function definitions 35// function definitions
36 36
37/******************************************************************* 37/*******************************************************************
38 UserExperienceParseFromXml - 38 UserExperienceParseFromXml -
39 39
40*******************************************************************/ 40*******************************************************************/
41extern "C" HRESULT UserExperienceParseFromXml( 41extern "C" HRESULT UserExperienceParseFromXml(
@@ -72,7 +72,7 @@ LExit:
72} 72}
73 73
74/******************************************************************* 74/*******************************************************************
75 UserExperienceUninitialize - 75 UserExperienceUninitialize -
76 76
77*******************************************************************/ 77*******************************************************************/
78extern "C" void UserExperienceUninitialize( 78extern "C" void UserExperienceUninitialize(
@@ -87,7 +87,7 @@ extern "C" void UserExperienceUninitialize(
87} 87}
88 88
89/******************************************************************* 89/*******************************************************************
90 UserExperienceLoad - 90 UserExperienceLoad -
91 91
92*******************************************************************/ 92*******************************************************************/
93extern "C" HRESULT UserExperienceLoad( 93extern "C" HRESULT UserExperienceLoad(
@@ -129,7 +129,7 @@ LExit:
129} 129}
130 130
131/******************************************************************* 131/*******************************************************************
132 UserExperienceUnload - 132 UserExperienceUnload -
133 133
134*******************************************************************/ 134*******************************************************************/
135extern "C" HRESULT UserExperienceUnload( 135extern "C" HRESULT UserExperienceUnload(
@@ -380,7 +380,7 @@ EXTERN_C BAAPI UserExperienceOnBeginMsiTransactionBegin(
380 args.wzTransactionId = wzTransactionId; 380 args.wzTransactionId = wzTransactionId;
381 381
382 results.cbSize = sizeof(results); 382 results.cbSize = sizeof(results);
383 383
384 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONBEGINMSITRANSACTIONBEGIN, &args, &results); 384 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONBEGINMSITRANSACTIONBEGIN, &args, &results);
385 ExitOnFailure(hr, "BA OnBeginMsiTransactionBegin failed."); 385 ExitOnFailure(hr, "BA OnBeginMsiTransactionBegin failed.");
386 386
@@ -1017,7 +1017,7 @@ EXTERN_C BAAPI UserExperienceOnCommitMsiTransactionBegin(
1017 args.wzTransactionId = wzTransactionId; 1017 args.wzTransactionId = wzTransactionId;
1018 1018
1019 results.cbSize = sizeof(results); 1019 results.cbSize = sizeof(results);
1020 1020
1021 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCOMMITMSITRANSACTIONBEGIN, &args, &results); 1021 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCOMMITMSITRANSACTIONBEGIN, &args, &results);
1022 ExitOnFailure(hr, "BA OnCommitMsiTransactionBegin failed."); 1022 ExitOnFailure(hr, "BA OnCommitMsiTransactionBegin failed.");
1023 1023
@@ -1033,8 +1033,10 @@ LExit:
1033EXTERN_C BAAPI UserExperienceOnCommitMsiTransactionComplete( 1033EXTERN_C BAAPI UserExperienceOnCommitMsiTransactionComplete(
1034 __in BURN_USER_EXPERIENCE* pUserExperience, 1034 __in BURN_USER_EXPERIENCE* pUserExperience,
1035 __in LPCWSTR wzTransactionId, 1035 __in LPCWSTR wzTransactionId,
1036 __in HRESULT hrStatus 1036 __in HRESULT hrStatus,
1037 ) 1037 __in BOOTSTRAPPER_APPLY_RESTART restart,
1038 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* pAction
1039)
1038{ 1040{
1039 HRESULT hr = S_OK; 1041 HRESULT hr = S_OK;
1040 BA_ONCOMMITMSITRANSACTIONCOMPLETE_ARGS args = { }; 1042 BA_ONCOMMITMSITRANSACTIONCOMPLETE_ARGS args = { };
@@ -1043,12 +1045,17 @@ EXTERN_C BAAPI UserExperienceOnCommitMsiTransactionComplete(
1043 args.cbSize = sizeof(args); 1045 args.cbSize = sizeof(args);
1044 args.wzTransactionId = wzTransactionId; 1046 args.wzTransactionId = wzTransactionId;
1045 args.hrStatus = hrStatus; 1047 args.hrStatus = hrStatus;
1048 args.restart = restart;
1049 args.recommendation = *pAction;
1046 1050
1047 results.cbSize = sizeof(results); 1051 results.cbSize = sizeof(results);
1052 results.action = *pAction;
1048 1053
1049 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCOMMITMSITRANSACTIONCOMPLETE, &args, &results); 1054 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCOMMITMSITRANSACTIONCOMPLETE, &args, &results);
1050 ExitOnFailure(hr, "BA OnCommitMsiTransactionComplete failed."); 1055 ExitOnFailure(hr, "BA OnCommitMsiTransactionComplete failed.");
1051 1056
1057 *pAction = results.action;
1058
1052LExit: 1059LExit:
1053 return hr; 1060 return hr;
1054} 1061}
@@ -1908,7 +1915,7 @@ EXTERN_C BAAPI UserExperienceOnPauseAUBegin(
1908 args.cbSize = sizeof(args); 1915 args.cbSize = sizeof(args);
1909 1916
1910 results.cbSize = sizeof(results); 1917 results.cbSize = sizeof(results);
1911 1918
1912 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPAUSEAUTOMATICUPDATESBEGIN, &args, &results); 1919 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPAUSEAUTOMATICUPDATESBEGIN, &args, &results);
1913 ExitOnFailure(hr, "BA OnPauseAUBegin failed."); 1920 ExitOnFailure(hr, "BA OnPauseAUBegin failed.");
1914 1921
@@ -2523,7 +2530,7 @@ EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionBegin(
2523 args.wzTransactionId = wzTransactionId; 2530 args.wzTransactionId = wzTransactionId;
2524 2531
2525 results.cbSize = sizeof(results); 2532 results.cbSize = sizeof(results);
2526 2533
2527 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONROLLBACKMSITRANSACTIONBEGIN, &args, &results); 2534 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONROLLBACKMSITRANSACTIONBEGIN, &args, &results);
2528 ExitOnFailure(hr, "BA OnRollbackMsiTransactionBegin failed."); 2535 ExitOnFailure(hr, "BA OnRollbackMsiTransactionBegin failed.");
2529 2536
@@ -2534,7 +2541,9 @@ LExit:
2534EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionComplete( 2541EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionComplete(
2535 __in BURN_USER_EXPERIENCE* pUserExperience, 2542 __in BURN_USER_EXPERIENCE* pUserExperience,
2536 __in LPCWSTR wzTransactionId, 2543 __in LPCWSTR wzTransactionId,
2537 __in HRESULT hrStatus 2544 __in HRESULT hrStatus,
2545 __in BOOTSTRAPPER_APPLY_RESTART restart,
2546 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION *pAction
2538 ) 2547 )
2539{ 2548{
2540 HRESULT hr = S_OK; 2549 HRESULT hr = S_OK;
@@ -2544,12 +2553,17 @@ EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionComplete(
2544 args.cbSize = sizeof(args); 2553 args.cbSize = sizeof(args);
2545 args.wzTransactionId = wzTransactionId; 2554 args.wzTransactionId = wzTransactionId;
2546 args.hrStatus = hrStatus; 2555 args.hrStatus = hrStatus;
2556 args.restart = restart;
2557 args.recommendation = *pAction;
2547 2558
2548 results.cbSize = sizeof(results); 2559 results.cbSize = sizeof(results);
2560 results.action = *pAction;
2549 2561
2550 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONROLLBACKMSITRANSACTIONCOMPLETE, &args, &results); 2562 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONROLLBACKMSITRANSACTIONCOMPLETE, &args, &results);
2551 ExitOnFailure(hr, "BA OnRollbackMsiTransactionComplete failed."); 2563 ExitOnFailure(hr, "BA OnRollbackMsiTransactionComplete failed.");
2552 2564
2565 *pAction = results.action;
2566
2553LExit: 2567LExit:
2554 return hr; 2568 return hr;
2555} 2569}
@@ -2651,7 +2665,7 @@ EXTERN_C BAAPI UserExperienceOnSystemRestorePointBegin(
2651 args.cbSize = sizeof(args); 2665 args.cbSize = sizeof(args);
2652 2666
2653 results.cbSize = sizeof(results); 2667 results.cbSize = sizeof(results);
2654 2668
2655 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONSYSTEMRESTOREPOINTBEGIN, &args, &results); 2669 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONSYSTEMRESTOREPOINTBEGIN, &args, &results);
2656 ExitOnFailure(hr, "BA OnSystemRestorePointBegin failed."); 2670 ExitOnFailure(hr, "BA OnSystemRestorePointBegin failed.");
2657 2671