NSIS脚本实用技巧和注意事项
增加安装日志文件 install.log
下载NSIS 对应版本的log 并覆盖替换,参考文章(一)
添加代码
!include "LogicLib.nsh"
# ...
# MessageBox MB_OK "$INSTDIR"
LogSet on
#...
注意, 使用LogSet on 时候,"$INSTDIR" 必须不为空,否则不会生成install.log
效果
最后在安装目录下生成 install.log
禁止多个安装程序实例
在.onInit中,添加下面代码
Function .onInit
# 禁止多个安装程序实例
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "zhkt_install") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_OK|MB_ICONEXCLAMATION "安装程序已经在运行。"
Abort
FunctionEnd
创建快捷方式不成功
在NSIS 脚本OnStartExtractFiles 函数中创建快捷不成功,请在.onInstSuccess 创建快捷方式。可能是因为 OnStartExtractFiles 是绑定的后台运行的回调函数。
脚本中宏不能嵌套调用
以下错误代码示例
!macro InstallExeDepand RegKey SubRegKey DepandExeName Arg
File /oname=$PLUGINSDIR\${DepandExeName} ".\depands\${DepandExeName}"
Push $R0
ClearErrors
;这里检测 该版本的运行时版本号是否存在
ReadRegStr $R0 HKLM "${RegKey}" "${SubRegKey}"
;
IfErrors 0 +2
; Exec "$PLUGINSDIR\${VcRedistName} /q" ;若不存在,执行静默安装
ExecWait "$PLUGINSDIR\${DepandExeName} ${Arg}" ; 调试安装
StrCpy $R0 "-1"
;MessageBox MB_OK "安装完毕"
pop $R0
!macroend
# 宏内插入宏 是不支持的 下面代码是错误的
!macro InstallVcRedist GUID VcRedistName Arg
!insertmacro InstallExeDepand "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${GUID} "BundleVersion" ${VcRedistName} ${Arg}
!macroend
注意上面为错误的代码