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 | ||