diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-02-22 16:16:12 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-02-22 20:25:06 -0600 |
| commit | 4f4c85ed66f1b2dfb1bec76d54d7b50c637d5bfa (patch) | |
| tree | 6de8e63ad46626ec457af256d481e81d726f3860 /src/engine/package.cpp | |
| parent | d0d93beac0b79fa9c3d43398813954988afda18f (diff) | |
| download | wix-4f4c85ed66f1b2dfb1bec76d54d7b50c637d5bfa.tar.gz wix-4f4c85ed66f1b2dfb1bec76d54d7b50c637d5bfa.tar.bz2 wix-4f4c85ed66f1b2dfb1bec76d54d7b50c637d5bfa.zip | |
Add patch target for slipstream MSI package even if not installed.
Fixes #3897
Diffstat (limited to 'src/engine/package.cpp')
| -rw-r--r-- | src/engine/package.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/engine/package.cpp b/src/engine/package.cpp index bb61cdcd..115866f3 100644 --- a/src/engine/package.cpp +++ b/src/engine/package.cpp | |||
| @@ -282,7 +282,9 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 282 | { | 282 | { |
| 283 | if (pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k] && CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pPackage->sczId, -1, pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k], -1)) | 283 | if (pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k] && CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pPackage->sczId, -1, pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k], -1)) |
| 284 | { | 284 | { |
| 285 | pMsiPackage->Msi.rgpSlipstreamMspPackages[k] = pPackage; | 285 | BURN_SLIPSTREAM_MSP* pSlipstreamMsp = pMsiPackage->Msi.rgSlipstreamMsps + k; |
| 286 | pSlipstreamMsp->pMspPackage = pPackage; | ||
| 287 | pSlipstreamMsp->dwMsiChainedPatchIndex = BURN_PACKAGE_INVALID_PATCH_INDEX; | ||
| 286 | 288 | ||
| 287 | ReleaseNullStr(pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k]); // we don't need the slipstream package id any longer so free it. | 289 | ReleaseNullStr(pMsiPackage->Msi.rgsczSlipstreamMspPackageIds[k]); // we don't need the slipstream package id any longer so free it. |
| 288 | } | 290 | } |
| @@ -295,6 +297,25 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 295 | 297 | ||
| 296 | AssertSz(pPackages->cPatchInfo == cMspPackages, "Count of packages patch info should be equal to the number of MSP packages."); | 298 | AssertSz(pPackages->cPatchInfo == cMspPackages, "Count of packages patch info should be equal to the number of MSP packages."); |
| 297 | 299 | ||
| 300 | #if DEBUG | ||
| 301 | // Loop through all MSI packages seeing if any of them are missing their slipstream MSP. | ||
| 302 | for (DWORD i = 0; i < pPackages->cPackages; ++i) | ||
| 303 | { | ||
| 304 | BURN_PACKAGE* pPackage = &pPackages->rgPackages[i]; | ||
| 305 | |||
| 306 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) | ||
| 307 | { | ||
| 308 | for (DWORD k = 0; k < pPackage->Msi.cSlipstreamMspPackages; ++k) | ||
| 309 | { | ||
| 310 | if (pPackage->Msi.rgsczSlipstreamMspPackageIds[k]) | ||
| 311 | { | ||
| 312 | AssertSz(FALSE, "MSI slipstream MSP package doesn't exist."); | ||
| 313 | } | ||
| 314 | } | ||
| 315 | } | ||
| 316 | } | ||
| 317 | #endif | ||
| 318 | |||
| 298 | hr = ParsePatchTargetCode(pPackages, pixnBundle); | 319 | hr = ParsePatchTargetCode(pPackages, pixnBundle); |
| 299 | ExitOnFailure(hr, "Failed to parse target product codes."); | 320 | ExitOnFailure(hr, "Failed to parse target product codes."); |
| 300 | 321 | ||
