2016-12-14 204 views
0

我更新的基于InstallShield安装的UI相显示消息框。我已经添加了一个新的托管自定义操作,使用C#编写,并使用Wix DTF打包。 正确调用操作,并执行必要的操作。MSI:在安装

问题我是否显示错误消息发送到用户。

方法1:MsiProcessMessage

从文章我读过,我明白MsiProcessMessage是做了正确的方法,但是这种方法并不能在UI序列工作(安装程序之前,实际开始复制文件和修改系统)。按安装顺序,此方法起作用。我使用的代码如下:

Record record = new Record() { FormatString = "Password is not valid for this user." }; 
session.Message(
    InstallMessage.Error | (InstallMessage)(MessageBoxIcon.Error) | (InstallMessage)MessageBoxButtons.OK, 
    record 
); 

它实际上是不可能显示使用MsiProcessMessage在UI序列(立即执行)的错误信息?

方法2:MessageBox.Show

使用Windows.Forms作品用于示出的消息框。但是,消息显示在设置向导的背景中,并在Windows任务栏中显示一个单独的图标。

有没有办法让安装向导窗口句柄,这种方式解决这个问题?

回答

2

你也不太提及这一点,但我猜你是调用自定义操作掀起了DoAction ControlEvent,发表过的东西就像一个按钮的点击。在封面下方,这与在InstallUISequence中安排它非常不同。 MsiProcessMessage doesn't work from DoAction

对于使用Windows安装程序的UI体验适当整合,你应该避免使用MessageBox.Show(你的方法2)。更好集成选项包括:

所有这三个涉及编辑您的项目的用户界面,但不同。

+0

你猜对了。我已经选择了'SpawnDialog'作为解决方法。第二种解决方法是通过窗口名称找到安装程序窗口(知道我的安装程序将具有什么名称),这在我看来更糟糕。感谢您的帮助! –

+0

我发现在MSI中创建具有MESSAGECAPTION和MESSAGETEXT属性的通用消息框对话并不重要。然后在ControlEvent中,您可以分配这些属性并生成对话框。 –