You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MSI transactions allow multiple MSI packages to be installed or removed in a batch such that failure in any of the packages will rollback all the preceding packages in the transaction.
See more on MSDN Multiple-Package Installations
The main benefit of MSI transactions is that they can properly rollback packages that installed a major upgrade. Consider the following scenraio:
A bundle contains 2 packages- A and B
During an upgrade:
Package A-v1 performs a major upgrade on package A-v0.
Package B-v1 fails
With current WiX rollback implementation, package B will properly rollback to preceding state. Package A however, will be removed leaving the system with package B-v0 and without package A.
Now consider the same scenario with MSI transaction: Once package B has failed, both packages- B and A-v1 would rollback restoring the state of the system to what it was.
A possible workaround for the same problem would be to detect bundle v0 and repair it. This however, is not always feasible- for example when v0 was deployed as distinct MSI packages rather than a bundle, or if one of the packages was patched at some point.
Implementation suggestion:
Add a 'Transaction' attribute to Chain and RollbackBoundary elements. Possible values would be Yes/No
During ApplyExecute, whenever a rollback boundary is executed (as well as the chain):
If we're in a transaction, commit it.
If the new boundary wants transactions, start a new transaction
At the end of the chain:
If we're in a transaction, commit it.
At any point, if an error occurs:
If we're in a transaction, roll it back.
Otherwise, keep current rollback behavior.
Cavets:
When using MSI transactions, packages can't be Permanent.
If an ExePackage internally starts a new transaction, it would fail
If an ExePackage installs another MSI, it will install as part of the transaction.
Care should be taken to properly handle other bundle (probably a BundlePackage element could come in handy here)
The text was updated successfully, but these errors were encountered:
Hi @nirbar. I merged wixtoolset/wix#215 with the expectation that you would eventually address my comments but I haven't seen any new pull requests. Are you using this feature, and is it working for you?
I implemented it for a customer. I don't know whether or not they've been
using it since.
It did work during tests though.
בתאריך יום ד׳, 12 בדצמ׳ 2018 ב-6:33 מאת Sean Hall <
notifications@github.com>:
Feature request: Support MSI transactions
MSI transactions allow multiple MSI packages to be installed or removed in a batch such that failure in any of the packages will rollback all the preceding packages in the transaction.
See more on MSDN Multiple-Package Installations
The main benefit of MSI transactions is that they can properly rollback packages that installed a major upgrade. Consider the following scenraio:
With current WiX rollback implementation, package B will properly rollback to preceding state. Package A however, will be removed leaving the system with package B-v0 and without package A.
Now consider the same scenario with MSI transaction: Once package B has failed, both packages- B and A-v1 would rollback restoring the state of the system to what it was.
A possible workaround for the same problem would be to detect bundle v0 and repair it. This however, is not always feasible- for example when v0 was deployed as distinct MSI packages rather than a bundle, or if one of the packages was patched at some point.
Implementation suggestion:
Cavets:
The text was updated successfully, but these errors were encountered: