NSIS卸载器自定义组件/COMPONENTSONLYONCUSTOM参数使用问题求助
NSIS卸载端仅自定义模式显示组件的解决方法
你的核心问题是卸载端的InstType定义逻辑错误:重复定义了同一个卸载类型,且没有给自定义卸载类型单独绑定/COMPONENTSONLYONCUSTOM参数。以下是修正方案:
错误原因
- 你重复定义了
un.$(instType)这个卸载InstType(先定义无参数版本,再定义带参数版本),NSIS无法识别这种冲突设置,导致参数失效。 /COMPONENTSONLYONCUSTOM参数的作用是标记某一个特定的安装/卸载类型,只有选中该类型时才显示组件列表。你需要给卸载端单独定义一个“自定义”类型,而非给默认类型加参数。
修正后的代码
LangString instType ${LANG_ENGLISH} "Default" LangString customInstType ${LANG_ENGLISH} "Custom" ; 安装端类型定义 InstType $(instType) ; 默认安装:不显示组件 InstType /COMPONENTSONLYONCUSTOM $(customInstType) ; 自定义安装:仅选此类型时显示组件 ; 卸载端类型定义 InstType un.$(instType) ; 默认卸载:不显示组件 InstType /COMPONENTSONLYONCUSTOM un.$(customInstType) ; 自定义卸载:仅选此类型时显示组件 ; 安装流程页面 Page components Page instfiles ; 卸载流程页面 UninstPage components UninstPage instfiles ; 卸载初始化:设置默认选中卸载的默认类型 Function un.onInit InstTypeSetDefault un.$(instType) FunctionEnd
关键说明
- 卸载端的InstType必须以
un.前缀开头,和安装类型做区分。 - 给卸载的自定义类型单独添加
/COMPONENTSONLYONCUSTOM参数,这样只有用户切换到该类型时,卸载组件页面才会显示。 - 通过
InstTypeSetDefault在卸载初始化时设置默认选中的卸载类型,确保启动卸载程序时默认不显示组件列表。
内容的提问来源于stack exchange,提问作者Eikao
相关产品推荐
相关产品推荐

