diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/burn/engine/msuengine.cpp | 97 | ||||
| -rw-r--r-- | src/burn/engine/package.cpp | 2 | ||||
| -rw-r--r-- | src/burn/engine/package.h | 2 | ||||
| -rw-r--r-- | src/burn/test/BurnUnitTest/PlanTest.cpp | 8 | ||||
| -rw-r--r-- | src/burn/test/BurnUnitTest/TestData/PlanTest/MsuPackageFixture_manifest.xml | 2 |
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 | ||
| 53 | LExit: | 41 | LExit: |
| 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> | ||
