Exemplo n.º 1
0
 /// <summary>
 /// Starts the execution of the MSI installation.
 /// </summary>
 public void StartExecute()
 {
     //Debug.Assert(false);
     started = true;
     if (!IsDemoMode)
     {
         UACRevealer.Enter();
         MsiRuntime.StartExecute();
     }
 }
Exemplo n.º 2
0
        /// <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);
        }