由于32位电脑上装不上64位应用,所以统一使用32位。
安装目录使用一个(不分Program Files (x86)\Program Files)
build: {
nsis: {
include: './build/installer.nsh'
},
}
; installer.nsh
!include "StrFunc.nsh" ; 引用字符串处理
${StrRep} ; 标注要使用的方法
var olddir ; 定义变量
!macro preInit ; 初始化前执行
; 读取64位注册表
SetRegView 64
; 如果是(应用内自)更新
${if} ${isUpdated}
;MessageBox MB_OK "64"
; olddir = 历史注册表卸载地址
ReadRegStr $olddir HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\应用的guid" "UninstallString"
; 删除64位注册表的key
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\应用的guid"
${endIf}
SetRegView 32
${if} ${isUpdated}
; "c:\Program Files (x86)\xxxx\Uninstall xxxx.exe" /allusers
${If} $olddir != ''
${StrRep} $olddir $olddir "\Uninstall xxxx.exe" ""
${StrRep} $olddir $olddir "/allusers" ""
${StrRep} $olddir $olddir '"' ""
;MessageBox MB_OK $olddir
; c:\Program Files (x86)\xxxx
; 写入32位默认安装地址
WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "$olddir"
${Endif}
${endIf}
!macroend
INSTALL_REGISTRY_KEY 一旦指定后,此后所有更新(自动或手动)都会向此地址安装
(手动指定一个新地址安装,再自动更新,会安装在哪个地址?isUpdated要加elseif,以在重新安装时删除历史注册表?)
64位系统的32位程序的注册表会放到如下路径 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node;64位在 HKEY_LOCAL_MACHINE\SOFTWARE
参考
https://nsis.sourceforge.io/Reference/ExecWait
https://blog.csdn.net/Ma_Hong_Kai/article/details/83041356
http://www.cppblog.com/wanghaiguang/archive/2012/03/08/167385.html
https://www.cnblogs.com/haihai187/p/4863797.html
网友评论