/// <summary> /// Starts the execution of the MSI installation. /// </summary> public void StartExecute() { //Debug.Assert(false); started = true; if (!IsDemoMode) { UACRevealer.Enter(); MsiRuntime.StartExecute(); } }
/// <summary> /// Processes information and progress messages sent to the user interface. /// <para> This method directly mapped to the /// <see cref="T:Microsoft.Deployment.WindowsInstaller.IEmbeddedUI.ProcessMessage" />.</para> /// </summary> /// <param name="messageType">Type of the message.</param> /// <param name="messageRecord">The message record.</param> /// <param name="buttons">The buttons.</param> /// <param name="icon">The icon.</param> /// <param name="defaultButton">The default button.</param> /// <returns></returns> public MessageResult ProcessMessage(InstallMessage messageType, Record messageRecord, MessageButtons buttons, MessageIcon icon, MessageDefaultButton defaultButton) { try { UACRevealer.Exit(); this.progressCounter.ProcessMessage(messageType, messageRecord); if (CurrentDialog != null) { InUIThread(() => CurrentDialog.OnProgress((int)Math.Round(100 * this.progressCounter.Progress))); } switch (messageType) { case InstallMessage.Progress: break; case InstallMessage.Error: case InstallMessage.Warning: case InstallMessage.User: case InstallMessage.Info: default: { if (messageType.IsOneOf(InstallMessage.Error, InstallMessage.Warning, InstallMessage.User)) { MessageBox.Show( this.shellView, messageRecord.ToString(), "[ErrorDlg_Title]".LocalizeWith(MsiRuntime.Localize), (MessageBoxButtons)(int)buttons, (MessageBoxIcon)(int)icon, (MessageBoxDefaultButton)(int)defaultButton); } if (messageType == InstallMessage.Info) { if (messageRecord.ToString().Contains("User canceled installation")) //there is no other way { UserInterrupted = true; } } if (messageType == InstallMessage.Error) { ErrorDetected = true; Errors.Add(messageRecord.ToString()); } if (messageType == InstallMessage.InstallEnd) { try { string lastValue = messageRecord[messageRecord.FieldCount].ToString(); //MSI record is actually 1-based ErrorDetected = (lastValue == "3"); UserInterrupted = (lastValue == "2"); } catch { } //nothing we can do really finished = true; } this.LogMessage("{0}: {1}", messageType, messageRecord); break; } } if (this.canceled) { return(MessageResult.Cancel); } } catch (Exception ex) { this.LogMessage(ex.ToString()); this.LogMessage(ex.StackTrace); } var result = MessageResult.OK; InUIThread(() => { if (CurrentDialog != null) { result = CurrentDialog.ProcessMessage(messageType, messageRecord, buttons, icon, defaultButton); } }); return(result); }