Electron打包自定义nsh(32位64位共用一套自更新)

2020-10-21  本文已影响0人  我叫Aliya但是被占用了

由于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

上一篇下一篇

猜你喜欢

热点阅读