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