MSI:在安装的 UI 阶段显示消息框
MSI: Show message box in UI phase of installation
我正在更新基于 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 任务栏中显示一个单独的图标。
有没有办法获取window安装向导的句柄,从而解决这个问题?
您没有完全提到这一点,但我猜您是在 DoAction ControlEvent, published off of something like a button click. Underneath the covers, this is very different from scheduling it in the InstallUISequence. MsiProcessMessage doesn't work from DoAction.
中调用您的自定义操作
为了正确集成 Windows 安装程序 UI 体验,您应该避免使用 MessageBox.Show(您的方法 2)。更好的集成选项包括:
- 调整可以显示在您调用此操作的对话框中的消息
- 通过有条件地调用 SpawnDialog ControlEvent
显示弹出消息
- 通过有条件地调用 NewDialog ControlEvent
显示一个额外的向导面板
所有这三个都涉及编辑项目的 UI,但有所不同。
我正在更新基于 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 任务栏中显示一个单独的图标。
有没有办法获取window安装向导的句柄,从而解决这个问题?
您没有完全提到这一点,但我猜您是在 DoAction ControlEvent, published off of something like a button click. Underneath the covers, this is very different from scheduling it in the InstallUISequence. MsiProcessMessage doesn't work from DoAction.
中调用您的自定义操作为了正确集成 Windows 安装程序 UI 体验,您应该避免使用 MessageBox.Show(您的方法 2)。更好的集成选项包括:
- 调整可以显示在您调用此操作的对话框中的消息
- 通过有条件地调用 SpawnDialog ControlEvent 显示弹出消息
- 通过有条件地调用 NewDialog ControlEvent 显示一个额外的向导面板
所有这三个都涉及编辑项目的 UI,但有所不同。