/// <summary> /// Sets the designated mode flag for the current install session. /// </summary> /// <param name="mode">The type of mode to be set.</param> /// <param name="value">The desired value of the mode.</param> /// <exception cref="InvalidHandleException">the Session handle is invalid</exception> /// <exception cref="ArgumentOutOfRangeException">an invalid mode flag was specified</exception> /// <exception cref="InvalidOperationException">the mode cannot not be set</exception> /// <remarks><p> /// Win32 MSI API: /// <a href="http://msdn.microsoft.com/library/en-us/msi/setup/msisetmode.asp">MsiSetMode</a> /// </p></remarks> public void SetMode(InstallRunMode mode, bool value) { this.ValidateSessionAccess(); uint ret = RemotableNativeMethods.MsiSetMode((int)this.Handle, (uint)mode, value); if (ret != 0) { if (ret == (uint)NativeMethods.Error.ACCESS_DENIED) { throw new InvalidOperationException(); } else { throw InstallerException.ExceptionFromReturnCode(ret); } } }