2010-11-01 54 views
0

我的安装程序引导应用程序在开始时会进行一系列MSI调用,以便从MSI(安装哪些版本,安装哪些功能,属性值,路径等)获取信息。在进行这些MSI调用时,Windows安装程序会弹出一个窗口,其上带有一个“取消”按钮。我的代码有陷阱无处不在,以检查是否由MSI调用返回的错误代码是ERROR_INSTALL_USEREXIT,以便引导应用程序可以停止,如果用户单击取消,但我所见过的所有返回值,即使当我知道我确信我设法点击取消按钮(我实际上看到按钮被按下),是ERROR_SUCCESS。如何判断用户在调用MSI函数时是否单击取消?

有什么方法可以100%确定地告诉用户是否在进行这些MSI呼叫时点击取消?如果没有,在MSI通话过程中是否有办法隐藏取消按钮,这样用户就不会被误认为他可以在当时取消这个错误信念? (在快速机器上,这不是什么大问题,因为对话消失得相当快,但是在慢速机器上,用户实际上有机会点击按钮。)

回答

0

如果我理解正确,听起来你正在变小“准备安装”样式对话框。如果是这样的话,你想要做的就是在MsiSetInternalUI前面打电话来隐藏所有(或大部分)用户界面。请注意,如果您然后拨打MsiInstallProduct或类似命令启动安装,则可能需要还原非无声UI级别。

如果我误解了您的问题,而您正在谈论自定义操作,那么您的代码可以找出有关用户取消事件的唯一位置是通过MsiProcessMessage的返回码,这也是您要使用的API禁用取消按钮。

+0

谢谢。虽然有点极端,它确实实现了我之后的工作,主要是为了摆脱Cancel按钮,因为我似乎无法得到一个可靠的方法来确定它是否被点击。 – RobH 2010-11-02 17:13:20