NSIS 设置$INSTDIR不生效

NSIS设置的页面顺序如下

!insertmacro MUI_PAGE_WELCOME 
!insertmacro MUI_PAGE_LICENSE ".\license.txt"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW HandleInstallDir
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU Application $data
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_PAGE_FINISH

欢迎界面-->授权协议-->自定义的模块-->选择目录。。。

选择目录之前有个模块用来检查是否安装,安装了就不允许选择目录,权当升级

Function HandleInstallDir
	ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" "InstallDir"
	StrLen $R2 $R1
		
	${If} $R2 > 2
		StrCpy $INSTDIR $R1
		Call DisableInstallDir
	${EndIf}
FunctionEnd

Function DisableInstallDir
	;禁用浏览按钮
	FindWindow $0 "#32770" "" $HWNDPARENT
	GetDlgItem $0 $0 1001
	EnableWindow $0 0
	;禁止编辑目录
	FindWindow $0 "#32770" "" $HWNDPARENT
	GetDlgItem $0 $0 1019
	EnableWindow $0 0
FunctionEnd

结果打印$INSTDIR已经被修改为我设置的路径,目录选择界面的浏览和编辑控件也成功禁用了,

可是路径居然是默认的

!define PRODUCT_NAME "MyApp"

InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"

导致编辑也失效了,只有默认的安装了

后来使用最简单的安装脚本,在.onInit里面初始化安装目录,居然成功了,可是NSIS改了这些也没跟我说,只能自己慢慢试了

Function .onInit
	Call HandleInstallDir
	FindProcDLL::FindProc "${PRODUCT_NAME}.exe"
	Pop $R0
	IntCmp $R0 1 0 no_run
	MessageBox MB_ICONSTOP "安装程序检测到$(^Name)正在运行,请退出程序后重试"
	Quit
	no_run:	
FunctionEnd 

.onInit中调用HandleInstallDir有点浪费,做个初始化就可以了的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值