aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-07-21 16:29:56 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-07-21 18:26:06 -0500
commit339fc1d2148e6b7fe8cd664e81ee65e51405aa23 (patch)
tree3e62be0e273811521eff3ab497f76facaad0ed40 /src/burn
parent9fc43c11d3b006e42c4d3ff9a19d06fd9ac58d51 (diff)
downloadwix-339fc1d2148e6b7fe8cd664e81ee65e51405aa23.tar.gz
wix-339fc1d2148e6b7fe8cd664e81ee65e51405aa23.tar.bz2
wix-339fc1d2148e6b7fe8cd664e81ee65e51405aa23.zip
Remove support for uninstalling MSU package.
Fixes 6749
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/msuengine.cpp97
-rw-r--r--src/burn/engine/package.cpp2
-rw-r--r--src/burn/engine/package.h2
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp8
-rw-r--r--src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml2
5 files changed, 12 insertions, 99 deletions
diff --git a/src/burn/engine/msuengine.cpp b/src/burn/engine/msuengine.cpp
index 400fdc92..43f5f76c 100644
--- a/src/burn/engine/msuengine.cpp
+++ b/src/burn/engine/msuengine.cpp
@@ -31,24 +31,12 @@ extern "C" HRESULT MsuEngineParsePackageFromXml(
31{ 31{
32 HRESULT hr = S_OK; 32 HRESULT hr = S_OK;
33 33
34 // @KB
35 hr = XmlGetAttributeEx(pixnMsuPackage, L"KB", &pPackage->Msu.sczKB);
36 ExitOnFailure(hr, "Failed to get @KB.");
37
38 // @DetectCondition 34 // @DetectCondition
39 hr = XmlGetAttributeEx(pixnMsuPackage, L"DetectCondition", &pPackage->Msu.sczDetectCondition); 35 hr = XmlGetAttributeEx(pixnMsuPackage, L"DetectCondition", &pPackage->Msu.sczDetectCondition);
40 ExitOnFailure(hr, "Failed to get @DetectCondition."); 36 ExitOnRequiredXmlQueryFailure(hr, "Failed to get @DetectCondition.");
41 37
42 // We can only uninstall MSU packages if they have a KB and we are on Win7 or newer. 38 // Uninstalling MSU packages isn't supported because newer OS's don't allow silent uninstallation.
43 if (pPackage->Msu.sczKB && *pPackage->Msu.sczKB && ::IsWindows7OrGreater()) 39 pPackage->fPermanent = TRUE;
44 {
45 pPackage->Msu.fUninstallable = TRUE;
46 }
47 else
48 {
49 pPackage->fPermanent = TRUE;
50 pPackage->Msu.fUninstallable = FALSE;
51 }
52 40
53LExit: 41LExit:
54 return hr; 42 return hr;
@@ -58,7 +46,6 @@ extern "C" void MsuEnginePackageUninitialize(
58 __in BURN_PACKAGE* pPackage 46 __in BURN_PACKAGE* pPackage
59 ) 47 )
60{ 48{
61 ReleaseNullStr(pPackage->Msu.sczKB);
62 ReleaseNullStr(pPackage->Msu.sczDetectCondition); 49 ReleaseNullStr(pPackage->Msu.sczDetectCondition);
63} 50}
64 51
@@ -108,30 +95,7 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
108 switch (pPackage->currentState) 95 switch (pPackage->currentState)
109 { 96 {
110 case BOOTSTRAPPER_PACKAGE_STATE_PRESENT: 97 case BOOTSTRAPPER_PACKAGE_STATE_PRESENT:
111 switch (pPackage->requested) 98 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
112 {
113 case BOOTSTRAPPER_REQUEST_STATE_PRESENT: __fallthrough;
114 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
115 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
116 break;
117
118 case BOOTSTRAPPER_REQUEST_STATE_ABSENT: __fallthrough;
119 case BOOTSTRAPPER_REQUEST_STATE_CACHE:
120 execute = !pPackage->fPermanent ? BOOTSTRAPPER_ACTION_STATE_UNINSTALL : BOOTSTRAPPER_ACTION_STATE_NONE;
121 break;
122
123 case BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT:
124 execute = pPackage->Msu.fUninstallable ? BOOTSTRAPPER_ACTION_STATE_UNINSTALL : BOOTSTRAPPER_ACTION_STATE_NONE;
125 break;
126
127 case BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT:
128 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
129 break;
130
131 default:
132 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
133 break;
134 }
135 break; 99 break;
136 100
137 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT: 101 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT:
@@ -143,10 +107,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
143 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 107 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
144 break; 108 break;
145 109
146 case BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT:
147 execute = pPackage->Msu.fUninstallable ? BOOTSTRAPPER_ACTION_STATE_UNINSTALL : BOOTSTRAPPER_ACTION_STATE_NONE;
148 break;
149
150 default: 110 default:
151 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 111 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
152 break; 112 break;
@@ -161,41 +121,7 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
161 // Calculate the rollback action if there is an execute action. 121 // Calculate the rollback action if there is an execute action.
162 if (BOOTSTRAPPER_ACTION_STATE_NONE != execute) 122 if (BOOTSTRAPPER_ACTION_STATE_NONE != execute)
163 { 123 {
164 switch (pPackage->currentState) 124 rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
165 {
166 case BOOTSTRAPPER_PACKAGE_STATE_PRESENT:
167 switch (pPackage->requested)
168 {
169 case BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT: __fallthrough;
170 case BOOTSTRAPPER_REQUEST_STATE_ABSENT:
171 rollback = BOOTSTRAPPER_ACTION_STATE_INSTALL;
172 break;
173
174 default:
175 rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
176 break;
177 }
178 break;
179
180 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT:
181 switch (pPackage->requested)
182 {
183 case BOOTSTRAPPER_REQUEST_STATE_PRESENT: __fallthrough;
184 case BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT: __fallthrough;
185 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
186 rollback = !pPackage->fPermanent ? BOOTSTRAPPER_ACTION_STATE_UNINSTALL : BOOTSTRAPPER_ACTION_STATE_NONE;
187 break;
188
189 default:
190 rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
191 break;
192 }
193 break;
194
195 default:
196 hr = E_INVALIDARG;
197 ExitOnRootFailure(hr, "Invalid package expected state.");
198 }
199 } 125 }
200 126
201 // return values 127 // return values
@@ -272,7 +198,6 @@ extern "C" HRESULT MsuEngineExecutePackage(
272 LPWSTR sczSystemPath = NULL; 198 LPWSTR sczSystemPath = NULL;
273 LPWSTR sczWusaPath = NULL; 199 LPWSTR sczWusaPath = NULL;
274 LPWSTR sczCommand = NULL; 200 LPWSTR sczCommand = NULL;
275 LPWSTR sczEscapedKB = NULL;
276 SC_HANDLE schWu = NULL; 201 SC_HANDLE schWu = NULL;
277 BOOL fWuWasDisabled = FALSE; 202 BOOL fWuWasDisabled = FALSE;
278 STARTUPINFOW si = { }; 203 STARTUPINFOW si = { };
@@ -324,15 +249,6 @@ extern "C" HRESULT MsuEngineExecutePackage(
324 ExitOnFailure(hr, "Failed to format MSU install command."); 249 ExitOnFailure(hr, "Failed to format MSU install command.");
325 break; 250 break;
326 251
327 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL:
328 hr = AppEscapeCommandLineArgumentFormatted(&sczEscapedKB, L"%ls", pPackage->Msu.sczKB);
329 ExitOnFailure(hr, "Failed to escape MSU KB.");
330
331 // format command
332 hr = StrAllocFormatted(&sczCommand, L"\"%ls\" /uninstall /kb:%ls /quiet /norestart", sczWusaPath, sczEscapedKB);
333 ExitOnFailure(hr, "Failed to format MSU uninstall command.");
334 break;
335
336 default: 252 default:
337 hr = E_UNEXPECTED; 253 hr = E_UNEXPECTED;
338 ExitOnFailure(hr, "Failed to get action arguments for MSU package."); 254 ExitOnFailure(hr, "Failed to get action arguments for MSU package.");
@@ -347,7 +263,7 @@ extern "C" HRESULT MsuEngineExecutePackage(
347 ExitOnFailure(hr, "Failed to append log path to MSU command-line."); 263 ExitOnFailure(hr, "Failed to append log path to MSU command-line.");
348 } 264 }
349 265
350 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msuPackage.action), sczMsuPath ? sczMsuPath : pPackage->Msu.sczKB, sczCommand); 266 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msuPackage.action), sczMsuPath, sczCommand);
351 267
352 hr = EnsureWUServiceEnabled(fStopWusaService, &schWu, &fWuWasDisabled); 268 hr = EnsureWUServiceEnabled(fStopWusaService, &schWu, &fWuWasDisabled);
353 ExitOnFailure(hr, "Failed to ensure WU service was enabled to install MSU package."); 269 ExitOnFailure(hr, "Failed to ensure WU service was enabled to install MSU package.");
@@ -388,7 +304,6 @@ LExit:
388 ReleaseStr(sczSystemPath); 304 ReleaseStr(sczSystemPath);
389 ReleaseStr(sczWusaPath); 305 ReleaseStr(sczWusaPath);
390 ReleaseStr(sczCommand); 306 ReleaseStr(sczCommand);
391 ReleaseStr(sczEscapedKB);
392 307
393 ReleaseHandle(pi.hProcess); 308 ReleaseHandle(pi.hProcess);
394 ReleaseHandle(pi.hThread); 309 ReleaseHandle(pi.hThread);
diff --git a/src/burn/engine/package.cpp b/src/burn/engine/package.cpp
index 88e7cb9d..c56f74c8 100644
--- a/src/burn/engine/package.cpp
+++ b/src/burn/engine/package.cpp
@@ -255,7 +255,7 @@ extern "C" HRESULT PackagesParseFromXml(
255 fUninstallable = pPackage->Exe.fUninstallable; 255 fUninstallable = pPackage->Exe.fUninstallable;
256 break; 256 break;
257 case BURN_PACKAGE_TYPE_MSU: 257 case BURN_PACKAGE_TYPE_MSU:
258 fUninstallable = pPackage->Msu.fUninstallable; 258 fUninstallable = FALSE;
259 break; 259 break;
260 } 260 }
261 261
diff --git a/src/burn/engine/package.h b/src/burn/engine/package.h
index 449c4e08..e8d49e53 100644
--- a/src/burn/engine/package.h
+++ b/src/burn/engine/package.h
@@ -421,8 +421,6 @@ typedef struct _BURN_PACKAGE
421 struct 421 struct
422 { 422 {
423 LPWSTR sczDetectCondition; 423 LPWSTR sczDetectCondition;
424 LPWSTR sczKB;
425 BOOL fUninstallable;
426 } Msu; 424 } Msu;
427 }; 425 };
428} BURN_PACKAGE; 426} BURN_PACKAGE;
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index 7998f837..a98484c1 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -2249,6 +2249,7 @@ namespace Bootstrapper
2249 void SingleMsuInstallTest() 2249 void SingleMsuInstallTest()
2250 { 2250 {
2251 HRESULT hr = S_OK; 2251 HRESULT hr = S_OK;
2252 LONGLONG llPlannedAction = 0;
2252 BURN_ENGINE_STATE engineState = { }; 2253 BURN_ENGINE_STATE engineState = { };
2253 BURN_ENGINE_STATE* pEngineState = &engineState; 2254 BURN_ENGINE_STATE* pEngineState = &engineState;
2254 BURN_PLAN* pPlan = &engineState.plan; 2255 BURN_PLAN* pPlan = &engineState.plan;
@@ -2260,7 +2261,10 @@ namespace Bootstrapper
2260 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_INSTALL); 2261 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_INSTALL);
2261 NativeAssert::Succeeded(hr, "CorePlan failed"); 2262 NativeAssert::Succeeded(hr, "CorePlan failed");
2262 2263
2264 llPlannedAction = VariableGetNumericHelper(&engineState.variables, BURN_BUNDLE_ACTION);
2265
2263 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); 2266 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action);
2267 Assert::Equal<LONGLONG>(BOOTSTRAPPER_ACTION_INSTALL, llPlannedAction);
2264 NativeAssert::StringEqual(L"{06077C60-DC46-4F4A-8D3C-05F869187191}", pPlan->wzBundleId); 2268 NativeAssert::StringEqual(L"{06077C60-DC46-4F4A-8D3C-05F869187191}", pPlan->wzBundleId);
2265 NativeAssert::StringEqual(L"{06077C60-DC46-4F4A-8D3C-05F869187191}", pPlan->wzBundleProviderKey); 2269 NativeAssert::StringEqual(L"{06077C60-DC46-4F4A-8D3C-05F869187191}", pPlan->wzBundleProviderKey);
2266 Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); 2270 Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle);
@@ -2302,7 +2306,6 @@ namespace Bootstrapper
2302 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 2306 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
2303 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2307 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2304 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"test.msu"); 2308 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"test.msu");
2305 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2306 ValidateExecuteMsuPackage(pPlan, fRollback, dwIndex++, L"test.msu", BOOTSTRAPPER_ACTION_STATE_INSTALL); 2309 ValidateExecuteMsuPackage(pPlan, fRollback, dwIndex++, L"test.msu", BOOTSTRAPPER_ACTION_STATE_INSTALL);
2307 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2310 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2308 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2311 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -2315,8 +2318,6 @@ namespace Bootstrapper
2315 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 2318 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
2316 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"test.msu"); 2319 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"test.msu");
2317 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2320 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2318 ValidateExecuteMsuPackage(pPlan, fRollback, dwIndex++, L"test.msu", BOOTSTRAPPER_ACTION_STATE_UNINSTALL);
2319 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2320 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2321 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2321 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 2322 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
2322 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); 2323 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
@@ -2336,7 +2337,6 @@ namespace Bootstrapper
2336 Assert::Equal(uIndex, pPlan->cPlannedProviders); 2337 Assert::Equal(uIndex, pPlan->cPlannedProviders);
2337 2338
2338 Assert::Equal(1ul, pEngineState->packages.cPackages); 2339 Assert::Equal(1ul, pEngineState->packages.cPackages);
2339 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"test.msu", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT);
2340 } 2340 }
2341 2341
2342 [Fact] 2342 [Fact]
diff --git a/src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml b/src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml
index fb6afa88..3bb7acf1 100644
--- a/src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml
+++ b/src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml
@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="BurnBundle" Extension="log" /><RelatedBundle Id="{B94478B1-E1F3-4700-9CE8-6AA090854AEC}" Action="Upgrade" /><Variable Id="WixBundleInProgressName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="payaQenPi7_8hq6T._EXtBW0NvR7gA" FilePath="fakeba.dll" SourcePath="u0" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" SourcePath="u1" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" SourcePath="u2" /></UX><Container Id="WixAttachedContainer" FileSize="119" Hash="06D28293FD57CD231E125EF9C82418A488928A98832A6937A77A3283A17A5C37F8D619C51759319A57E8F8A948FA73E8C5814185A0114130F3213AB268073555" FilePath="test.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="test.msu" FilePath="test.msu" FileSize="28" Hash="B040F02D2F90E04E9AFBDC91C00CEB5DF97D48E205D96DC0A44E10AF8870794DAE62CA70224F12BE9112AA730BBE470CA81FB5617AAC690E832F3F84510E92BA" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{06077C60-DC46-4F4A-8D3C-05F869187191}" ExecutableName="test.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{06077C60-DC46-4F4A-8D3C-05F869187191}"><Arp Register="yes" DisplayName="BurnBundle" DisplayVersion="1.0.0.0" Publisher="Example Corporation" /></Registration><Chain><MsuPackage Id="test.msu" Cache="keep" CacheId="B040F02D2F90E04E9AFBDC91C00CEB5DF97D48E205D96DC0A44E10AF8870794DAE62CA70224F12BE9112AA730BBE470CA81FB5617AAC690E832F3F84510E92BA" InstallSize="28" Size="28" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" DetectCondition="DetectedTheMsu" KB="xyz"><PayloadRef Id="test.msu" /></MsuPackage></Chain><CommandLine Variables="upperCase" /></BurnManifest> \ No newline at end of file <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="BurnBundle" Extension="log" /><RelatedBundle Id="{B94478B1-E1F3-4700-9CE8-6AA090854AEC}" Action="Upgrade" /><Variable Id="WixBundleInProgressName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="payaQenPi7_8hq6T._EXtBW0NvR7gA" FilePath="fakeba.dll" SourcePath="u0" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" SourcePath="u1" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" SourcePath="u2" /></UX><Container Id="WixAttachedContainer" FileSize="119" Hash="06D28293FD57CD231E125EF9C82418A488928A98832A6937A77A3283A17A5C37F8D619C51759319A57E8F8A948FA73E8C5814185A0114130F3213AB268073555" FilePath="test.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="test.msu" FilePath="test.msu" FileSize="28" Hash="B040F02D2F90E04E9AFBDC91C00CEB5DF97D48E205D96DC0A44E10AF8870794DAE62CA70224F12BE9112AA730BBE470CA81FB5617AAC690E832F3F84510E92BA" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{06077C60-DC46-4F4A-8D3C-05F869187191}" ExecutableName="test.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{06077C60-DC46-4F4A-8D3C-05F869187191}"><Arp Register="yes" DisplayName="BurnBundle" DisplayVersion="1.0.0.0" Publisher="Example Corporation" /></Registration><Chain><MsuPackage Id="test.msu" Cache="keep" CacheId="B040F02D2F90E04E9AFBDC91C00CEB5DF97D48E205D96DC0A44E10AF8870794DAE62CA70224F12BE9112AA730BBE470CA81FB5617AAC690E832F3F84510E92BA" InstallSize="28" Size="28" PerMachine="yes" Permanent="yes" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" DetectCondition="DetectedTheMsu"><PayloadRef Id="test.msu" /></MsuPackage></Chain><CommandLine Variables="upperCase" /></BurnManifest>