diff options
Diffstat (limited to '')
-rw-r--r-- | src/engine/msiengine.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/engine/msiengine.cpp b/src/engine/msiengine.cpp index e274df28..47211309 100644 --- a/src/engine/msiengine.cpp +++ b/src/engine/msiengine.cpp | |||
@@ -82,6 +82,11 @@ extern "C" HRESULT MsiEngineParsePackageFromXml( | |||
82 | hr = VerParseVersion(scz, 0, FALSE, &pPackage->Msi.pVersion); | 82 | hr = VerParseVersion(scz, 0, FALSE, &pPackage->Msi.pVersion); |
83 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); | 83 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); |
84 | 84 | ||
85 | if (pPackage->Msi.pVersion->fInvalid) | ||
86 | { | ||
87 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
88 | } | ||
89 | |||
85 | // @UpgradeCode | 90 | // @UpgradeCode |
86 | hr = XmlGetAttributeEx(pixnMsiPackage, L"UpgradeCode", &pPackage->Msi.sczUpgradeCode); | 91 | hr = XmlGetAttributeEx(pixnMsiPackage, L"UpgradeCode", &pPackage->Msi.sczUpgradeCode); |
87 | if (E_NOTFOUND != hr) | 92 | if (E_NOTFOUND != hr) |
@@ -420,6 +425,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
420 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pPackage->Msi.pInstalledVersion); | 425 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pPackage->Msi.pInstalledVersion); |
421 | ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode); | 426 | ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode); |
422 | 427 | ||
428 | if (pPackage->Msi.pInstalledVersion->fInvalid) | ||
429 | { | ||
430 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pPackage->Msi.sczProductCode, sczInstalledVersion); | ||
431 | } | ||
432 | |||
423 | // compare versions | 433 | // compare versions |
424 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pPackage->Msi.pInstalledVersion, &nCompareResult); | 434 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pPackage->Msi.pInstalledVersion, &nCompareResult); |
425 | ExitOnFailure(hr, "Failed to compare version '%ls' to installed version: '%ls'", pPackage->Msi.pVersion->sczVersion, pPackage->Msi.pInstalledVersion->sczVersion); | 435 | ExitOnFailure(hr, "Failed to compare version '%ls' to installed version: '%ls'", pPackage->Msi.pVersion->sczVersion, pPackage->Msi.pInstalledVersion->sczVersion); |
@@ -460,6 +470,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
460 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); | 470 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); |
461 | ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode); | 471 | ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode); |
462 | 472 | ||
473 | if (pVersion->fInvalid) | ||
474 | { | ||
475 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, sczInstalledProductCode, sczInstalledVersion); | ||
476 | } | ||
477 | |||
463 | // compare versions | 478 | // compare versions |
464 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult); | 479 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult); |
465 | ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion); | 480 | ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion); |
@@ -536,6 +551,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
536 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); | 551 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); |
537 | ExitOnFailure(hr, "Failed to parse related installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, wzProductCode); | 552 | ExitOnFailure(hr, "Failed to parse related installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, wzProductCode); |
538 | 553 | ||
554 | if (pVersion->fInvalid) | ||
555 | { | ||
556 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, wzProductCode, sczInstalledVersion); | ||
557 | } | ||
558 | |||
539 | // compare versions | 559 | // compare versions |
540 | if (pRelatedMsi->fMinProvided) | 560 | if (pRelatedMsi->fMinProvided) |
541 | { | 561 | { |
@@ -1052,6 +1072,11 @@ extern "C" HRESULT MsiEngineAddCompatiblePackage( | |||
1052 | 1072 | ||
1053 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion); | 1073 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion); |
1054 | ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode); | 1074 | ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode); |
1075 | |||
1076 | if (pCompatiblePackage->Msi.pVersion->fInvalid) | ||
1077 | { | ||
1078 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pCompatiblePackage->Msi.sczProductCode, sczInstalledVersion); | ||
1079 | } | ||
1055 | } | 1080 | } |
1056 | 1081 | ||
1057 | // For now, copy enough information to support uninstalling the newer, compatible package. | 1082 | // For now, copy enough information to support uninstalling the newer, compatible package. |
@@ -1506,6 +1531,11 @@ static HRESULT ParseRelatedMsiFromXml( | |||
1506 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMinVersion); | 1531 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMinVersion); |
1507 | ExitOnFailure(hr, "Failed to parse @MinVersion: %ls", scz); | 1532 | ExitOnFailure(hr, "Failed to parse @MinVersion: %ls", scz); |
1508 | 1533 | ||
1534 | if (pRelatedMsi->pMinVersion->fInvalid) | ||
1535 | { | ||
1536 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
1537 | } | ||
1538 | |||
1509 | // flag that we have a min version | 1539 | // flag that we have a min version |
1510 | pRelatedMsi->fMinProvided = TRUE; | 1540 | pRelatedMsi->fMinProvided = TRUE; |
1511 | 1541 | ||
@@ -1523,6 +1553,11 @@ static HRESULT ParseRelatedMsiFromXml( | |||
1523 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMaxVersion); | 1553 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMaxVersion); |
1524 | ExitOnFailure(hr, "Failed to parse @MaxVersion: %ls", scz); | 1554 | ExitOnFailure(hr, "Failed to parse @MaxVersion: %ls", scz); |
1525 | 1555 | ||
1556 | if (pRelatedMsi->pMaxVersion->fInvalid) | ||
1557 | { | ||
1558 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
1559 | } | ||
1560 | |||
1526 | // flag that we have a max version | 1561 | // flag that we have a max version |
1527 | pRelatedMsi->fMaxProvided = TRUE; | 1562 | pRelatedMsi->fMaxProvided = TRUE; |
1528 | 1563 | ||