public class MSITestManager
  {
    private IntPtr parent;

    private Session fSession;

    public event ActionStartEventHandler CustomActionStarted;

    public delegate void ActionStartEventHandler(object sender,
ActionStartEventArgs e);

    public void RunInstall(string PathToMSI, string CommandLineArguments)
    {
      try
      {
        Installer.SetInternalUI(InstallUIOptions.Silent, ref parent);

        ExternalUIHandler handler = new
ExternalUIHandler(ActionStartHandler);

        InstallLogModes ilm =
                InstallLogModes.Progress | InstallLogModes.FatalExit |
InstallLogModes.Error |
                InstallLogModes.Warning | InstallLogModes.User |
InstallLogModes.Info |
                InstallLogModes.ResolveSource |
InstallLogModes.OutOfDiskSpace |
                InstallLogModes.ActionStart | InstallLogModes.ActionData |
                InstallLogModes.CommonData | InstallLogModes.Progress |
InstallLogModes.Initialize |
                InstallLogModes.Terminate | InstallLogModes.ShowDialog;

        ExternalUIHandler result = Installer.SetExternalUI(handler, ilm);

        fSession = Installer.OpenPackage(PathToMSI, false);

        // app already installed
        if (fSession["Installed"] != string.Empty)
        {
          fSession["REMOVE"] = "ALL";
        }
        else
        {
          fSession["LAUNCHPROGRAM"] = "1";
        }

        fSession.DoAction("NalInitialConfiguration");

        //session.DoActionSequence("InstallUISequence");
        //fSession.DoActionSequence("InstallExecuteSequence");
        //Installer.InstallProduct(PathToMSI, CommandLineArguments);
      }
      catch (InstallerException e)
      {
        Debug.WriteLine("INSTALLER EXCEPTION -- " + e.Message);
      }
      catch (Exception e)
      {
        Debug.WriteLine("EXCEPTION -- " + e.ToString());
        //   do something meaningful
      }
      finally
      {
        fSession.Close();
      }
    }

    private MessageResult ActionStartHandler(InstallMessage MessageType,
string Message, MessageBoxButtons Buttons,
      MessageBoxIcon Icons, MessageBoxDefaultButton DefaultButton)
    {
      switch (MessageType)
      {
        case InstallMessage.ActionStart:
          if (CustomActionStarted != null)
          {
            ActionStartMessage message =
(ActionStartMessage)ParseMessage(Message, MessageType);
            ActionStartEventArgs eventArgs = new ActionStartEventArgs();
            eventArgs.DateRun = message.DateRun;
            eventArgs.Message = message.Message;
            eventArgs.Name = message.Name;
            eventArgs.Session = fSession; 
            CustomActionStarted(this, eventArgs);
          }
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.ActionData:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.CommonData:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Error:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.FatalExit:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.FilesInUse:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Info:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Initialize:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.InstallEnd:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.InstallStart:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.OutOfDiskSpace:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Progress:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.ResolveSource:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.RMFilesInUse:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.ShowDialog:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Terminate:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.User:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
        case InstallMessage.Warning:
          //ChangeListViewProperly(MessageType.ToString() + ": " + Message +
" " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffff"));
          break;
      }

      return MessageResult.OK;
    }

    private object ParseMessage(string Message, InstallMessage MessageType)
    {
      switch (MessageType)
      {
        case InstallMessage.ActionStart:
          ActionStartMessage message = new ActionStartMessage();
          String[] items = Message.Trim().Split(new char[] { ' ' });

          string dateRun = items[1];
          string actionName = items[2];

          if (dateRun.EndsWith(":"))
          {
            dateRun = dateRun.Trim().TrimEnd(new char[] { ':' });
          }

          if (actionName.EndsWith("."))
          {
            actionName = actionName.Trim().TrimEnd(new char[] { '.' });
          }                     

          StringBuilder messageInfo = new StringBuilder();
          if (items.Length > 3)
          {
            
            for (int i = 3; i < items.Length; i ++)
            {
              messageInfo.Append(items[i] + " ");
            }
          }

          DateTime.TryParse(dateRun, out message.DateRun);
          message.Name = actionName.Trim();
          message.Message = messageInfo.ToString().Trim();

          return message;

          break;
      }

      return null;
    }
  }

  public class ActionStartMessage
  {
    public string Name;
    public DateTime DateRun;
    public string Message;
  }

  public class ActionStartEventArgs : EventArgs
  {
    private string fName;
    private DateTime fDateRun;
    private string fMessage;
    private Session fSession;

    public string Name
    {
      get { return fName; }
      set { fName = value; }
    }

    public DateTime DateRun
    {
      get { return fDateRun; }
      set { fDateRun = value; }
    }

    public string Message
    {
      get { return fMessage; }
      set { fMessage = value; }
    }

    public Session Session
    {
      get { return fSession; }
      set { fSession = value; }
    }
  }
-- 
View this message in context: 
http://n2.nabble.com/Access-to-the-session-object-when-using-an-ExternalUI-handler-tp2826870p2826870.html
Sent from the wix-users mailing list archive at Nabble.com.


------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to