/// <summary> /// Makes the current process the owner of the multi-package installation transaction. /// </summary> /// <param name="attributes">Select optional behavior when joining the transaction.</param> /// <exception cref="InvalidHandleException">The transaction handle is not valid.</exception> /// <exception cref="InstallerException">The transaction could not be joined.</exception> /// <remarks><p> /// Win32 MSI API: /// <a href="http://msdn.microsoft.com/library/en-us/msi/setup/msijointransaction.asp">MsiJoinTransaction</a> /// </p></remarks> public void Join(TransactionAttributes attributes) { IntPtr hChangeOfOwnerEvent; uint ret = NativeMethods.MsiJoinTransaction((int)this.Handle, (int)attributes, out hChangeOfOwnerEvent); if (ret != 0) { throw InstallerException.ExceptionFromReturnCode(ret); } this.ownerChangeEvent = hChangeOfOwnerEvent; if (this.ownerChangeEvent != IntPtr.Zero && this.ownerChangeListeners.Count >= 1) { new Thread(this.WaitForOwnerChange).Start(); } }