From f892f972ca59e04a727e0ded488741205d2748e8 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Tue, 8 Apr 2025 21:05:24 -0400 Subject: Bring back WixBundleSourceProcess* variables. Fixes https://github.com/wixtoolset/issues/issues/9029 --- src/burn/engine/cache.cpp | 6 ++++++ src/burn/engine/core.h | 2 ++ src/burn/test/BurnUnitTest/PlanTest.cpp | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/burn/engine/cache.cpp b/src/burn/engine/cache.cpp index 16db4a81..e432df69 100644 --- a/src/burn/engine/cache.cpp +++ b/src/burn/engine/cache.cpp @@ -260,6 +260,9 @@ extern "C" HRESULT CacheInitializeSources( hr = PathForCurrentProcess(&sczCurrentPath, NULL); ExitOnFailure(hr, "Failed to get current process path."); + hr = VariableSetString(pVariables, BURN_BUNDLE_SOURCE_PROCESS_PATH, sczCurrentPath, FALSE, FALSE); + ExitOnFailure(hr, "Failed to set %ls variable.", BURN_BUNDLE_SOURCE_PROCESS_PATH); + // Determine if we are running from the package cache or not. hr = CacheGetCompletedPath(pCache, pRegistration->fPerMachine, pRegistration->sczCode, &sczCompletedFolder); ExitOnFailure(hr, "Failed to get completed path for bundle."); @@ -275,6 +278,9 @@ extern "C" HRESULT CacheInitializeSources( hr = PathGetDirectory(sczCurrentPath, &pCache->sczSourceProcessFolder); ExitOnFailure(hr, "Failed to initialize cache source folder."); + hr = VariableSetString(pVariables, BURN_BUNDLE_SOURCE_PROCESS_FOLDER, pCache->sczSourceProcessFolder, FALSE, FALSE); + ExitOnFailure(hr, "Failed to set %ls variable.", BURN_BUNDLE_SOURCE_PROCESS_FOLDER); + // If we're not running from the cache, ensure the original source is set. if (!pCache->fRunningFromCache) { diff --git a/src/burn/engine/core.h b/src/burn/engine/core.h index c5d0a370..cf615e35 100644 --- a/src/burn/engine/core.h +++ b/src/burn/engine/core.h @@ -46,6 +46,8 @@ const LPCWSTR BURN_BUNDLE_FORCED_RESTART_PACKAGE = L"WixBundleForcedRestartPacka const LPCWSTR BURN_BUNDLE_INSTALLED = L"WixBundleInstalled"; const LPCWSTR BURN_BUNDLE_ELEVATED = L"WixBundleElevated"; const LPCWSTR BURN_BUNDLE_PROVIDER_KEY = L"WixBundleProviderKey"; +const LPCWSTR BURN_BUNDLE_SOURCE_PROCESS_PATH = L"WixBundleSourceProcessPath"; +const LPCWSTR BURN_BUNDLE_SOURCE_PROCESS_FOLDER = L"WixBundleSourceProcessFolder"; const LPCWSTR BURN_BUNDLE_TAG = L"WixBundleTag"; const LPCWSTR BURN_BUNDLE_UILEVEL = L"WixBundleUILevel"; const LPCWSTR BURN_BUNDLE_VERSION = L"WixBundleVersion"; diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index e426cb09..25a0cb35 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp @@ -2990,6 +2990,18 @@ namespace Bootstrapper ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT); } + [Fact] + void ValidateCacheVariables() + { + BURN_ENGINE_STATE engineState = { }; + BURN_ENGINE_STATE* pEngineState = &engineState; + + InitializeEngineStateForCorePlan(wzSlipstreamModifiedManifestFileName, pEngineState); + + Assert::EndsWith(gcnew String(L".exe"), VariableGetStringHelper(&pEngineState->variables, BURN_BUNDLE_SOURCE_PROCESS_PATH)); + Assert::EndsWith(gcnew String(L"\\"), VariableGetStringHelper(&pEngineState->variables, BURN_BUNDLE_SOURCE_PROCESS_FOLDER)); + } + private: // This doesn't initialize everything, just enough for CorePlan to work. void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState) -- cgit v1.2.3-55-g6feb