首页 > 解决方案 > 使用 NSIS 卸载以前的 Wix 安装程序需要更长的时间,并且应用程序标题栏显示“无响应”

问题描述

我将我的软件从 Wix 安装程序迁移到 NSIS。安装我的软件的新版本后,我首先需要卸载以前的 Wix 包(如果存在)。

在 NSIS 安装程序中,在“欢迎”屏幕中单击“下一步”时,我正在检查以前的 Wix 包,如果它存在则将其卸载。下面是我的代码片段:

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE RemovePrevVerFunction

!insertmacro MUI_PAGE_WELCOME

!insertmacro MUI_LANGUAGE "English"

Function RemovePrevVerFunction
ReadRegStr $R0 HKLM "SOFTWARE\EMR\3.01.00" "InstallPath"
${If} $R0 != ""
MessageBox MB_OKCANCEL "EMR 3.01.00 is already installed. Remove the pervious version?" IDOK uninst
Abort
uninst:
ExecWait '"MsiExec.exe" /X{8ED262EE-FC73-47A9-BB86-D92223246881} /qn'   ; /x is to uninstall and /qn is to uninstall it silently
${EndIf}
FunctionEnd

使用上面的代码,我可以卸载以前的版本。但我需要做更多的事情。

  1. 虽然卸载它需要更长的时间,欢迎屏幕也变成“无响应”,但最终它正在完成卸载过程。有什么方法可以卸载它而不会没有响应?

  2. 我想在卸载时显示进度,以便最终用户知道卸载正在进行。为此,我删除了“/qn”(静默卸载),如果删除“/qn”,它会显示进度,但会弹出一个消息框“您确定要卸载此产品吗?” (可能是来自以前的 wix 安装程序)。有什么方法可以显示进度而不显示消息框“您确定要卸载此产品吗?”

请帮助我。

标签: wixnsis

解决方案


/qb!为参数。

这应该可以工作,因为参数/qb显示没有模式对话框的基本 UI,另外/qb!意味着您无法取消卸载过程。

有关它的更多信息,您可以在此处找到。

问候


推荐阅读