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