diff options
| author | Rob Mensching <rob@firegiant.com> | 2021-04-10 16:05:23 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2021-04-12 09:56:15 -0700 |
| commit | 0c2b4cf3a439eda3e19d20fadfc65ddc7d0394c0 (patch) | |
| tree | 825272bd86d365d8f2175fd6fadd9725c8b400ff /src/dutil/wiutil.cpp | |
| parent | ed0ef472c76ac0d2a3d7a138e4f3b7ad950a56bc (diff) | |
| download | wix-0c2b4cf3a439eda3e19d20fadfc65ddc7d0394c0.tar.gz wix-0c2b4cf3a439eda3e19d20fadfc65ddc7d0394c0.tar.bz2 wix-0c2b4cf3a439eda3e19d20fadfc65ddc7d0394c0.zip | |
Integrate fixes that make dutil a little more robust to failure
Diffstat (limited to 'src/dutil/wiutil.cpp')
| -rw-r--r-- | src/dutil/wiutil.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/dutil/wiutil.cpp b/src/dutil/wiutil.cpp index ffbfe85a..f1984266 100644 --- a/src/dutil/wiutil.cpp +++ b/src/dutil/wiutil.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | // Exit macros | 6 | // Exit macros |
| 7 | #define WiuExitTrace(x, s, ...) ExitTraceSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) | ||
| 7 | #define WiuExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) | 8 | #define WiuExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) |
| 8 | #define WiuExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) | 9 | #define WiuExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) |
| 9 | #define WiuExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) | 10 | #define WiuExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_WIUTIL, x, s, __VA_ARGS__) |
| @@ -692,12 +693,23 @@ extern "C" HRESULT DAPI WiuEnumRelatedProductCodes( | |||
| 692 | 693 | ||
| 693 | if (fReturnHighestVersionOnly) | 694 | if (fReturnHighestVersionOnly) |
| 694 | { | 695 | { |
| 695 | // get the version | 696 | // try to get the version but if the product registration is broken |
| 697 | // (for whatever reason), skip this product | ||
| 696 | hr = WiuGetProductInfo(wzCurrentProductCode, L"VersionString", &sczInstalledVersion); | 698 | hr = WiuGetProductInfo(wzCurrentProductCode, L"VersionString", &sczInstalledVersion); |
| 697 | WiuExitOnFailure(hr, "Failed to get version for product code: %ls", wzCurrentProductCode); | 699 | if (FAILED(hr)) |
| 700 | { | ||
| 701 | WiuExitTrace(hr, "Could not get product version for product code: %ls, skipping...", wzCurrentProductCode); | ||
| 702 | continue; | ||
| 703 | } | ||
| 698 | 704 | ||
| 705 | // try to parse the product version but if it is corrupt (for whatever | ||
| 706 | // reason), skip it | ||
| 699 | hr = FileVersionFromStringEx(sczInstalledVersion, 0, &qwCurrentVersion); | 707 | hr = FileVersionFromStringEx(sczInstalledVersion, 0, &qwCurrentVersion); |
| 700 | WiuExitOnFailure(hr, "Failed to convert version: %ls to DWORD64 for product code: %ls", sczInstalledVersion, wzCurrentProductCode); | 708 | if (FAILED(hr)) |
| 709 | { | ||
| 710 | WiuExitTrace(hr, "Could not convert version: %ls to DWORD64 for product code: %ls, skipping...", sczInstalledVersion, wzCurrentProductCode); | ||
| 711 | continue; | ||
| 712 | } | ||
| 701 | 713 | ||
| 702 | // if this is the first product found then it is the highest version (for now) | 714 | // if this is the first product found then it is the highest version (for now) |
| 703 | if (0 == *pcRelatedProducts) | 715 | if (0 == *pcRelatedProducts) |
