I am attempting to run installations from a test application. I am processing
the installer messages using an External UI Handler in the external
application and running the UI in silent mode. 

I would like access to the session object during the installation and can't
see a way to do this using InstallProduct. I want to be able to compare the
Property values after each of my Custom Actions has run. 

Does anyone know how I can get access to the session object BETWEEN each
Custom Action using DoAction("INSTALL") or by using InstallProduct (perhaps
via the external UI Handler callback). I have tried to create a custom event
for each action type e.g. (ActionStart) and am passing the session object as
event args. However, the session object values do not change after each
custom action is run. 

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-tp2826876p2826876.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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to