aboutsummaryrefslogtreecommitdiff
path: root/src/engine/package.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-02-22 16:16:12 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-02-22 20:25:06 -0600
commit4f4c85ed66f1b2dfb1bec76d54d7b50c637d5bfa (patch)
tree6de8e63ad46626ec457af256d481e81d726f3860 /src/engine/package.cpp
parentd0d93beac0b79fa9c3d43398813954988afda18f (diff)
downloadwix-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.cpp23
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