summaryrefslogtreecommitdiff
path: root/src/burn/engine/userexperience.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/userexperience.cpp')
-rw-r--r--src/burn/engine/userexperience.cpp56
1 files changed, 51 insertions, 5 deletions
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp
index a6d670ea..7cc6f049 100644
--- a/src/burn/engine/userexperience.cpp
+++ b/src/burn/engine/userexperience.cpp
@@ -1494,6 +1494,7 @@ EXTERN_C BAAPI UserExperienceOnExecuteFilesInUse(
1494 __in_z LPCWSTR wzPackageId, 1494 __in_z LPCWSTR wzPackageId,
1495 __in DWORD cFiles, 1495 __in DWORD cFiles,
1496 __in_ecount_z_opt(cFiles) LPCWSTR* rgwzFiles, 1496 __in_ecount_z_opt(cFiles) LPCWSTR* rgwzFiles,
1497 __in BOOTSTRAPPER_FILES_IN_USE_TYPE source,
1497 __inout int* pnResult 1498 __inout int* pnResult
1498 ) 1499 )
1499{ 1500{
@@ -1506,6 +1507,7 @@ EXTERN_C BAAPI UserExperienceOnExecuteFilesInUse(
1506 args.cFiles = cFiles; 1507 args.cFiles = cFiles;
1507 args.rgwzFiles = rgwzFiles; 1508 args.rgwzFiles = rgwzFiles;
1508 args.nRecommendation = *pnResult; 1509 args.nRecommendation = *pnResult;
1510 args.source = source;
1509 1511
1510 results.cbSize = sizeof(results); 1512 results.cbSize = sizeof(results);
1511 results.nResult = *pnResult; 1513 results.nResult = *pnResult;
@@ -2492,13 +2494,12 @@ static int FilterResult(
2492 __in int nResult 2494 __in int nResult
2493 ) 2495 )
2494{ 2496{
2495 DWORD dwFilteredAllowedResults = dwAllowedResults & MB_TYPEMASK;
2496 if (IDNOACTION == nResult || IDERROR == nResult) // do nothing and errors pass through. 2497 if (IDNOACTION == nResult || IDERROR == nResult) // do nothing and errors pass through.
2497 { 2498 {
2498 } 2499 }
2499 else 2500 else
2500 { 2501 {
2501 switch (dwFilteredAllowedResults) 2502 switch (dwAllowedResults)
2502 { 2503 {
2503 case MB_OK: 2504 case MB_OK:
2504 nResult = IDOK; 2505 nResult = IDOK;
@@ -2606,7 +2607,28 @@ static int FilterResult(
2606 } 2607 }
2607 break; 2608 break;
2608 2609
2609 case WIU_MB_OKIGNORECANCELRETRY: // custom Windows Installer utility return code. 2610 case BURN_MB_MSI_FILES_IN_USE:
2611 // https://docs.microsoft.com/en-us/windows/win32/msi/installvalidate-action
2612 if (IDRETRY == nResult || IDTRYAGAIN == nResult)
2613 {
2614 nResult = IDRETRY;
2615 }
2616 else if (IDCANCEL == nResult || IDABORT == nResult)
2617 {
2618 nResult = IDCANCEL;
2619 }
2620 else if (IDCONTINUE == nResult || IDIGNORE == nResult)
2621 {
2622 nResult = IDIGNORE;
2623 }
2624 else
2625 {
2626 nResult = IDNOACTION;
2627 }
2628 break;
2629
2630 case BURN_MB_MSI_RM_FILES_IN_USE:
2631 // https://docs.microsoft.com/en-us/windows/win32/msi/using-restart-manager-with-an-external-ui-
2610 if (IDOK == nResult || IDYES == nResult) 2632 if (IDOK == nResult || IDYES == nResult)
2611 { 2633 {
2612 nResult = IDOK; 2634 nResult = IDOK;
@@ -2615,11 +2637,15 @@ static int FilterResult(
2615 { 2637 {
2616 nResult = IDIGNORE; 2638 nResult = IDIGNORE;
2617 } 2639 }
2640 else if (IDNO == nResult)
2641 {
2642 nResult = IDNO;
2643 }
2618 else if (IDCANCEL == nResult || IDABORT == nResult) 2644 else if (IDCANCEL == nResult || IDABORT == nResult)
2619 { 2645 {
2620 nResult = IDCANCEL; 2646 nResult = IDCANCEL;
2621 } 2647 }
2622 else if (IDRETRY == nResult || IDTRYAGAIN == nResult || IDNO == nResult) 2648 else if (IDRETRY == nResult || IDTRYAGAIN == nResult)
2623 { 2649 {
2624 nResult = IDRETRY; 2650 nResult = IDRETRY;
2625 } 2651 }
@@ -2629,13 +2655,33 @@ static int FilterResult(
2629 } 2655 }
2630 break; 2656 break;
2631 2657
2632 case MB_RETRYTRYAGAIN: // custom return code. 2658 case BURN_MB_RETRYTRYAGAIN: // custom return code.
2633 if (IDRETRY != nResult && IDTRYAGAIN != nResult) 2659 if (IDRETRY != nResult && IDTRYAGAIN != nResult)
2634 { 2660 {
2635 nResult = IDNOACTION; 2661 nResult = IDNOACTION;
2636 } 2662 }
2637 break; 2663 break;
2638 2664
2665 case BURN_MB_NETFX_FILES_IN_USE:
2666 // https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-to-get-progress-from-the-dotnet-installer
2667 if (IDOK == nResult || IDYES == nResult)
2668 {
2669 nResult = IDYES;
2670 }
2671 else if (IDRETRY == nResult || IDTRYAGAIN == nResult)
2672 {
2673 nResult = IDRETRY;
2674 }
2675 else if (IDCANCEL == nResult || IDABORT == nResult)
2676 {
2677 nResult = IDCANCEL;
2678 }
2679 else
2680 {
2681 nResult = IDNO;
2682 }
2683 break;
2684
2639 default: 2685 default:
2640 AssertSz(FALSE, "Unknown allowed results."); 2686 AssertSz(FALSE, "Unknown allowed results.");
2641 break; 2687 break;