【问题标题】:MSI: Show message box in UI phase of installationMSI:在安装的 UI 阶段显示消息框
【发布时间】:2016-12-14 11:20:11
【问题描述】:

我正在更新基于 InstallShield 的安装程序。我添加了一个新的托管自定义操作,用 C# 编写,并使用 Wix DTF 打包。 动作被正确调用,并执行必要的动作。

我遇到的问题是向用户显示错误消息。

方法一: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序列(立即执行)中显示错误消息吗?

方法二:MessageBox.Show

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

有没有办法获取安装向导的窗口句柄,这样可以解决这个问题?

【问题讨论】:

    标签: wix installshield dtf


    【解决方案1】:

    您并没有完全提及这一点,但我猜您正在从DoAction ControlEvent 调用您的自定义操作,该操作是通过单击按钮等发布的。在封面之下,这与在InstallUISequence 中安排它非常不同。 MsiProcessMessage doesn't work from DoAction.

    为了与 Windows Installer UI 体验正确集成,您应该避免使用 MessageBox.Show(您的方法 2)。更好的集成选项包括:

    所有这三个都涉及编辑项目的 UI,但不同。

    【讨论】:

    • 你猜对了。我已经选择了SpawnDialog 作为解决方法。第二种解决方法是按窗口名称查找安装程序窗口(知道我的安装程序将具有什么名称),这在我看来要糟糕得多。感谢您的帮助!
    • 我发现在 MSI 中创建一个具有 MESSAGECAPTION 和 MESSAGETEXT 属性的通用消息框对话框很简单。然后在您的 ControlEvent 中,您可以分配这些属性并生成对话框。
    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2013-04-25
    相关资源
    最近更新 更多