diff options
Diffstat (limited to '')
| -rw-r--r-- | src/libs/dutil/WixToolset.DUtil/regutil.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/regutil.cpp b/src/libs/dutil/WixToolset.DUtil/regutil.cpp index 78507ade..64224d42 100644 --- a/src/libs/dutil/WixToolset.DUtil/regutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/regutil.cpp | |||
| @@ -590,6 +590,7 @@ DAPI_(HRESULT) RegReadVersion( | |||
| 590 | { | 590 | { |
| 591 | ExitFunction1(hr = E_FILENOTFOUND); | 591 | ExitFunction1(hr = E_FILENOTFOUND); |
| 592 | } | 592 | } |
| 593 | |||
| 593 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) | 594 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) |
| 594 | { | 595 | { |
| 595 | hr = RegReadString(hk, wzName, &sczVersion); | 596 | hr = RegReadString(hk, wzName, &sczVersion); |
| @@ -614,6 +615,58 @@ LExit: | |||
| 614 | return hr; | 615 | return hr; |
| 615 | } | 616 | } |
| 616 | 617 | ||
| 618 | |||
| 619 | DAPI_(HRESULT) RegReadWixVersion( | ||
| 620 | __in HKEY hk, | ||
| 621 | __in_z_opt LPCWSTR wzName, | ||
| 622 | __out VERUTIL_VERSION** ppVersion | ||
| 623 | ) | ||
| 624 | { | ||
| 625 | HRESULT hr = S_OK; | ||
| 626 | DWORD er = ERROR_SUCCESS; | ||
| 627 | DWORD dwType = 0; | ||
| 628 | DWORD cb = 0; | ||
| 629 | DWORD64 dw64Version = 0; | ||
| 630 | LPWSTR sczVersion = NULL; | ||
| 631 | VERUTIL_VERSION* pVersion = NULL; | ||
| 632 | |||
| 633 | cb = sizeof(DWORD64); | ||
| 634 | er = vpfnRegQueryValueExW(hk, wzName, NULL, &dwType, reinterpret_cast<LPBYTE>(&dw64Version), &cb); | ||
| 635 | if (E_FILENOTFOUND == HRESULT_FROM_WIN32(er)) | ||
| 636 | { | ||
| 637 | ExitFunction1(hr = E_FILENOTFOUND); | ||
| 638 | } | ||
| 639 | |||
| 640 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) | ||
| 641 | { | ||
| 642 | hr = RegReadString(hk, wzName, &sczVersion); | ||
| 643 | RegExitOnFailure(hr, "Failed to read registry version as string."); | ||
| 644 | |||
| 645 | hr = VerParseVersion(sczVersion, 0, FALSE, &pVersion); | ||
| 646 | RegExitOnFailure(hr, "Failed to convert registry string to version."); | ||
| 647 | } | ||
| 648 | else if (REG_QWORD == dwType) | ||
| 649 | { | ||
| 650 | hr = VerVersionFromQword(dw64Version, &pVersion); | ||
| 651 | RegExitOnFailure(hr, "Failed to convert registry string to version."); | ||
| 652 | } | ||
| 653 | else // unexpected data type | ||
| 654 | { | ||
| 655 | hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATATYPE); | ||
| 656 | RegExitOnRootFailure(hr, "Error reading version registry value due to unexpected data type: %u", dwType); | ||
| 657 | } | ||
| 658 | |||
| 659 | *ppVersion = pVersion; | ||
| 660 | pVersion = NULL; | ||
| 661 | |||
| 662 | LExit: | ||
| 663 | ReleaseVerutilVersion(pVersion); | ||
| 664 | ReleaseStr(sczVersion); | ||
| 665 | |||
| 666 | return hr; | ||
| 667 | } | ||
| 668 | |||
| 669 | |||
| 617 | DAPI_(HRESULT) RegReadNone( | 670 | DAPI_(HRESULT) RegReadNone( |
| 618 | __in HKEY hk, | 671 | __in HKEY hk, |
| 619 | __in_z_opt LPCWSTR wzName | 672 | __in_z_opt LPCWSTR wzName |
