Пример #1
0
        private static MsiAction ParseMsiAction(CustomActionData data)
        {
            Func <string, bool> parse = (c) => !String.IsNullOrEmpty(c) && bool.Parse(c);

            MsiAction action = MsiAction.None;

            if (parse(data["FirstInstall"]))
            {
                action |= MsiAction.FirstInstall;
            }
            if (parse(data["Upgrading"]))
            {
                action |= MsiAction.Upgrading;
            }
            if (parse(data["RemovingForUpgrade"]))
            {
                action |= MsiAction.RemovingForUpgrade;
            }
            if (parse(data["Uninstalling"]))
            {
                action |= MsiAction.Uninstalling;
            }
            if (parse(data["Maintenance"]))
            {
                action |= MsiAction.Maintenance;
            }

            return(action);
        }
        /// <summary>
        /// Convert an msi action to string.
        /// </summary>
        /// <param name="action">an msi action</param>
        /// <returns>one of i, x</returns>
        private string MsiActionToString(MsiAction action)
        {
            switch (action)
            {
            case MsiAction.Install:
                return("i");

            case MsiAction.UnInstall:
                return("x");

            default:
                throw new ArithmeticException();
            }
        }
        /// <summary>
        /// Install an MSI
        /// </summary>
        /// <param name="action">msi action</param>
        /// <param name="msiPath">path to the msi</param>
        /// <param name="msiArgs">additional msi parameters</param>
        /// <param name="logfile">resulting log file</param>
        private void MsiExec(string msiPath, string msiArgs, MsiAction action, out string logfile)
        {
            string msiAction = MsiActionToString(action);

            logfile = string.Format("{0}{1}.log", msiPath, msiAction);

            _msiexecProcess = this.VirtualMachineHost.RunProgramInGuest(
                "msiexec.exe", string.Format("/qn /{0} \"{1}\" /l*v \"{2}\" {3}",
                                             msiAction, msiPath, logfile, msiArgs), 0);

            if (_msiexecProcess.ExitCode == 3010)
            {
                // reboot required
            }
            else if (_msiexecProcess.ExitCode != 0)
            {
                throw new Exception(string.Format("{0} failed, return code: {1}",
                                                  action, _msiexecProcess.ExitCode));
            }
        }
 /// <summary>
 /// Convert an msi action to string.
 /// </summary>
 /// <param name="action">an msi action</param>
 /// <returns>one of i, x</returns>
 private string MsiActionToString(MsiAction action)
 {
     switch (action)
     {
         case MsiAction.Install:
             return "i";
         case MsiAction.UnInstall:
             return "x";
         default:
             throw new ArithmeticException();
     }
 }
        /// <summary>
        /// Install an MSI
        /// </summary>
        /// <param name="action">msi action</param>
        /// <param name="msiPath">path to the msi</param>
        /// <param name="msiArgs">additional msi parameters</param>
        /// <param name="logfile">resulting log file</param>
        private void MsiExec(string msiPath, string msiArgs, MsiAction action, out string logfile)
        {
            string msiAction = MsiActionToString(action);
            logfile = string.Format("{0}{1}.log", msiPath, msiAction);

            _msiexecProcess = this.VirtualMachineHost.RunProgramInGuest(
                "msiexec.exe", string.Format("/qn /{0} \"{1}\" /l*v \"{2}\" {3}",
                    msiAction, msiPath, logfile, msiArgs), 0);

            if (_msiexecProcess.ExitCode == 3010)
            {
                // reboot required
            }
            else if (_msiexecProcess.ExitCode != 0)
            {
                throw new Exception(string.Format("{0} failed, return code: {1}",
                    action, _msiexecProcess.ExitCode));
            }
        }