diff --git a/src/Directory.csproj.props b/src/Directory.csproj.props index 42407929a..6891ef2fc 100644 --- a/src/Directory.csproj.props +++ b/src/Directory.csproj.props @@ -2,7 +2,7 @@ - 14.0 + 13.0 true true $([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)wix.snk)) diff --git a/src/burn/engine/relatedbundle.cpp b/src/burn/engine/relatedbundle.cpp index 166c4ae83..2d95111fb 100644 --- a/src/burn/engine/relatedbundle.cpp +++ b/src/burn/engine/relatedbundle.cpp @@ -356,10 +356,19 @@ static HRESULT LoadRelatedBundleFromKey( LogId(REPORT_WARNING, MSG_RELATED_PACKAGE_INVALID_VERSION, wzRelatedBundleCode, sczBundleVersion); } + // Look for v7+ scope registration. hr = RegReadNumber(hkBundleCode, BURN_REGISTRATION_REGISTRY_BUNDLE_SCOPE, &dwScope); - ExitOnFailure(hr, "Failed to read registration %ls for bundle %ls.", wzRelatedBundleCode, BURN_REGISTRATION_REGISTRY_BUNDLE_SCOPE); + if (SUCCEEDED(hr)) + { + pRelatedBundle->detectedScope = static_cast(dwScope); + } + else if (E_FILENOTFOUND == hr) + { + hr = S_OK; - pRelatedBundle->detectedScope = static_cast(dwScope); + pRelatedBundle->detectedScope = fPerMachine ? BOOTSTRAPPER_SCOPE_PER_MACHINE : BOOTSTRAPPER_SCOPE_PER_USER; + } + ExitOnFailure(hr, "Failed to read registration %ls for bundle %ls.", wzRelatedBundleCode, BURN_REGISTRATION_REGISTRY_BUNDLE_SCOPE); hr = RegReadString(hkBundleCode, BURN_REGISTRATION_REGISTRY_BUNDLE_CACHE_PATH, &sczCachePath); ExitOnFailure(hr, "Failed to read cache path from registry for bundle: %ls", wzRelatedBundleCode); diff --git a/src/internal/SetBuildNumber/global.json.pp b/src/internal/SetBuildNumber/global.json.pp index b99149d23..b1acc7130 100644 --- a/src/internal/SetBuildNumber/global.json.pp +++ b/src/internal/SetBuildNumber/global.json.pp @@ -6,7 +6,7 @@ "WixToolset.Sdk": "{packageversion}" }, "sdk": { - "version": "10.0.100", + "version": "9.0.300", "rollForward": "latestFeature" } } diff --git a/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/Bundle.wxs b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/Bundle.wxs index e170667b7..eb2a74ac3 100644 --- a/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/Bundle.wxs +++ b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/Bundle.wxs @@ -1,9 +1,11 @@  - + + + diff --git a/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundle.wixproj b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundle.wixproj index ade65220d..ed15dedf4 100644 --- a/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundle.wixproj +++ b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundle.wixproj @@ -1,6 +1,7 @@  Bundle + $(DefineConstants);Version=1.0.0.0 diff --git a/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundleV2.wixproj b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundleV2.wixproj new file mode 100644 index 000000000..fcdbae054 --- /dev/null +++ b/src/test/burn/TestData/ConfigurableScopeTests/PerMachineBundle/PerMachineBundleV2.wixproj @@ -0,0 +1,12 @@ + + + Bundle + $(DefineConstants);Version=2.0.0.0 + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/Bundle.wxs b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/Bundle.wxs new file mode 100644 index 000000000..22879ee1a --- /dev/null +++ b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/Bundle.wxs @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/PerMachineBundleWix6.wixproj b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/PerMachineBundleWix6.wixproj new file mode 100644 index 000000000..bec8209e7 --- /dev/null +++ b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachineBundleWix6/PerMachineBundleWix6.wixproj @@ -0,0 +1,12 @@ + + + false + Bundle + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/PerMachinePkgWix6.wixproj b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/PerMachinePkgWix6.wixproj new file mode 100644 index 000000000..9fa921ec4 --- /dev/null +++ b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/PerMachinePkgWix6.wixproj @@ -0,0 +1,5 @@ + + + false + + \ No newline at end of file diff --git a/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/product.wxs b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/product.wxs new file mode 100644 index 000000000..4b14c9d24 --- /dev/null +++ b/src/test/burn/TestData6/ConfigurableScopeTests/PerMachinePkgWix6/product.wxs @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/burn/TestData6/TestData6.proj b/src/test/burn/TestData6/TestData6.proj new file mode 100644 index 000000000..6eeb18fdf --- /dev/null +++ b/src/test/burn/TestData6/TestData6.proj @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/test/burn/TestData6/nuget.config b/src/test/burn/TestData6/nuget.config new file mode 100644 index 000000000..ec40f2b20 --- /dev/null +++ b/src/test/burn/TestData6/nuget.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs index 9e8870fc1..8dc9c8204 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs @@ -150,6 +150,46 @@ public void BundleUpgradeWithSameScopeSucceeds() bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false); } + [RuntimeFact] + public void BundleUpgradeFromWix6IsLockedToFirstBundlesScope() + { + var bundle = this.CreateBundleInstaller("PerMachineBundleWix6"); + bundle.Install(); + + bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true); + + var testBAController = this.CreateTestBAController(); + testBAController.SetBundleScope(BundleScope.PerUser); + + var bundleV2 = this.CreateBundleInstaller("PerMachineBundleV2"); + var log = bundleV2.Install(); + Assert.True(LogVerifier.MessageInLogFileRegex(log, @"Upgraded bundle [{][0-9A-Fa-f\-]{36}[}] was already installed with scope: PerMachine\. Scope cannot change during upgrade\.")); + + bundleV2.Uninstall(); + bundleV2.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true); + bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true); + } + + [RuntimeFact] + public void BundleUpgradeFromWix6WithSameScopeSucceeds() + { + var bundle = this.CreateBundleInstaller("PerMachineBundleWix6"); + bundle.Install(); + + bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true); + + var testBAController = this.CreateTestBAController(); + testBAController.SetBundleScope(BundleScope.PerMachine); + + var bundleV2 = this.CreateBundleInstaller("PerMachineBundleV2"); + var log = bundleV2.Install(); + Assert.True(LogVerifier.MessageInLogFileRegex(log, @"Upgraded bundle [{][0-9A-Fa-f\-]{36}[}] was already installed with scope: PerMachine\. Scope cannot change during upgrade\.")); + + bundleV2.Uninstall(); + bundleV2.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true); + bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true); + } + [RuntimeFact] public void PMOU_Bundle_Default_Plan_Installs_PerMachine() { diff --git a/src/test/burn/test_burn.cmd b/src/test/burn/test_burn.cmd index a956c8384..3f03216b5 100644 --- a/src/test/burn/test_burn.cmd +++ b/src/test/burn/test_burn.cmd @@ -15,6 +15,7 @@ msbuild -Restore -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\test_burn_build.binlog || exit /b msbuild -Restore TestData\TestData.proj -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\test_burn_data_build.binlog || exit /b +msbuild -Restore TestData6\TestData6.proj -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\test_burn_data6_build.binlog || exit /b "%_B%\net462\win-x86\testexe.exe" /dm "%_B%\net8.0-windows\testhost.exe" mt.exe -manifest "WixToolsetTest.BurnE2E\testhost.longpathaware.manifest" -updateresource:"%_B%\net8.0-windows\testhost.exe"