diff options
Diffstat (limited to 'src/ca/XmlFile.cpp')
| -rw-r--r-- | src/ca/XmlFile.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/ca/XmlFile.cpp b/src/ca/XmlFile.cpp index 95449126..71c9a390 100644 --- a/src/ca/XmlFile.cpp +++ b/src/ca/XmlFile.cpp | |||
| @@ -464,9 +464,7 @@ LExit: | |||
| 464 | ReleaseStr(pwzCurrentFile); | 464 | ReleaseStr(pwzCurrentFile); |
| 465 | ReleaseStr(pwzCustomActionData); | 465 | ReleaseStr(pwzCustomActionData); |
| 466 | 466 | ||
| 467 | if (FAILED(hr)) | 467 | return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er); |
| 468 | er = ERROR_INSTALL_FAILURE; | ||
| 469 | return WcaFinalize(er); | ||
| 470 | } | 468 | } |
| 471 | 469 | ||
| 472 | 470 | ||
| @@ -483,7 +481,6 @@ extern "C" UINT __stdcall ExecXmlFile( | |||
| 483 | HRESULT hrOpenFailure = S_OK; | 481 | HRESULT hrOpenFailure = S_OK; |
| 484 | UINT er = ERROR_SUCCESS; | 482 | UINT er = ERROR_SUCCESS; |
| 485 | 483 | ||
| 486 | BOOL fIsWow64Process = FALSE; | ||
| 487 | BOOL fIsFSRedirectDisabled = FALSE; | 484 | BOOL fIsFSRedirectDisabled = FALSE; |
| 488 | BOOL fPreserveDate = FALSE; | 485 | BOOL fPreserveDate = FALSE; |
| 489 | 486 | ||
| @@ -533,10 +530,12 @@ extern "C" UINT __stdcall ExecXmlFile( | |||
| 533 | hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa); | 530 | hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa); |
| 534 | ExitOnFailure(hr, "failed to process CustomActionData"); | 531 | ExitOnFailure(hr, "failed to process CustomActionData"); |
| 535 | 532 | ||
| 533 | #ifndef _WIN64 | ||
| 536 | // Initialize the Wow64 API - store the result in fWow64APIPresent | 534 | // Initialize the Wow64 API - store the result in fWow64APIPresent |
| 537 | // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases | 535 | // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases |
| 538 | WcaInitializeWow64(); | 536 | WcaInitializeWow64(); |
| 539 | fIsWow64Process = WcaIsWow64Process(); | 537 | BOOL fIsWow64Process = WcaIsWow64Process(); |
| 538 | #endif | ||
| 540 | 539 | ||
| 541 | if (xaOpenFile != xa && xaOpenFilex64 != xa) | 540 | if (xaOpenFile != xa && xaOpenFilex64 != xa) |
| 542 | ExitOnFailure(hr = E_INVALIDARG, "invalid custom action data"); | 541 | ExitOnFailure(hr = E_INVALIDARG, "invalid custom action data"); |
| @@ -558,6 +557,7 @@ extern "C" UINT __stdcall ExecXmlFile( | |||
| 558 | 557 | ||
| 559 | if (xaOpenFilex64 == xa) | 558 | if (xaOpenFilex64 == xa) |
| 560 | { | 559 | { |
| 560 | #ifndef _WIN64 | ||
| 561 | if (!fIsWow64Process) | 561 | if (!fIsWow64Process) |
| 562 | { | 562 | { |
| 563 | hr = E_NOTIMPL; | 563 | hr = E_NOTIMPL; |
| @@ -568,6 +568,7 @@ extern "C" UINT __stdcall ExecXmlFile( | |||
| 568 | ExitOnFailure(hr, "Custom action was told to act on a 64-bit component, but was unable to disable filesystem redirection through the Wow64 API."); | 568 | ExitOnFailure(hr, "Custom action was told to act on a 64-bit component, but was unable to disable filesystem redirection through the Wow64 API."); |
| 569 | 569 | ||
| 570 | fIsFSRedirectDisabled = TRUE; | 570 | fIsFSRedirectDisabled = TRUE; |
| 571 | #endif | ||
| 571 | } | 572 | } |
| 572 | 573 | ||
| 573 | hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd); | 574 | hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd); |
| @@ -810,7 +811,9 @@ LExit: | |||
| 810 | fIsFSRedirectDisabled = FALSE; | 811 | fIsFSRedirectDisabled = FALSE; |
| 811 | WcaRevertWow64FSRedirection(); | 812 | WcaRevertWow64FSRedirection(); |
| 812 | } | 813 | } |
| 814 | #ifndef _WIN64 | ||
| 813 | WcaFinalizeWow64(); | 815 | WcaFinalizeWow64(); |
| 816 | #endif | ||
| 814 | 817 | ||
| 815 | ReleaseStr(pwzCustomActionData); | 818 | ReleaseStr(pwzCustomActionData); |
| 816 | ReleaseStr(pwzData); | 819 | ReleaseStr(pwzData); |
| @@ -829,9 +832,7 @@ LExit: | |||
| 829 | 832 | ||
| 830 | XmlUninitialize(); | 833 | XmlUninitialize(); |
| 831 | 834 | ||
| 832 | if (FAILED(hr)) | 835 | return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er); |
| 833 | er = ERROR_INSTALL_FAILURE; | ||
| 834 | return WcaFinalize(er); | ||
| 835 | } | 836 | } |
| 836 | 837 | ||
| 837 | 838 | ||
| @@ -882,6 +883,7 @@ extern "C" UINT __stdcall ExecXmlFileRollback( | |||
| 882 | hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData); | 883 | hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData); |
| 883 | ExitOnFailure(hr, "failed to read file contents from custom action data"); | 884 | ExitOnFailure(hr, "failed to read file contents from custom action data"); |
| 884 | 885 | ||
| 886 | #ifndef _WIN64 | ||
| 885 | fIs64Bit = (BOOL)iIs64Bit; | 887 | fIs64Bit = (BOOL)iIs64Bit; |
| 886 | 888 | ||
| 887 | if (fIs64Bit) | 889 | if (fIs64Bit) |
| @@ -902,6 +904,7 @@ extern "C" UINT __stdcall ExecXmlFileRollback( | |||
| 902 | hr = WcaDisableWow64FSRedirection(); | 904 | hr = WcaDisableWow64FSRedirection(); |
| 903 | ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API."); | 905 | ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API."); |
| 904 | } | 906 | } |
| 907 | #endif | ||
| 905 | 908 | ||
| 906 | // Always preserve the modified date on rollback | 909 | // Always preserve the modified date on rollback |
| 907 | hr = FileGetTime(pwzFileName, NULL, NULL, &ft); | 910 | hr = FileGetTime(pwzFileName, NULL, NULL, &ft); |
| @@ -937,8 +940,6 @@ LExit: | |||
| 937 | 940 | ||
| 938 | ReleaseMem(pbData); | 941 | ReleaseMem(pbData); |
| 939 | 942 | ||
| 940 | if (FAILED(hr)) | 943 | return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er); |
| 941 | er = ERROR_INSTALL_FAILURE; | ||
| 942 | return WcaFinalize(er); | ||
| 943 | } | 944 | } |
| 944 | 945 | ||
