# electron之nsis 打包重复安装检测

352 阅读1分钟

1.基础语法

www.wenjiangs.com/doc/dzu8vfr…

2.nsis 打包时将程序添加到window右键菜单

2.1 安装时写入注册表

  ...
  
  WriteRegExpandStr HKCR "*\shell${MAIN_EXE_NAME}" "" "使用 ${MAIN_EXE_NAME} 打开"
  WriteRegExpandStr HKCR "*\shell${MAIN_EXE_NAME}" "Icon" "$INSTDIR${MAIN_EXE_NAME}.exe"
  WriteRegExpandStr HKCR "*\shell${MAIN_EXE_NAME}\command" "" `"$INSTDIR${MAIN_EXE_NAME}.exe" "%V"`
  
  ...

2.2 卸载时删除注册表

  ...
  
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  DeleteRegKey HKCR "*\shell${MAIN_EXE_NAME}"
  DeleteRegKey HKCR "*\shell${MAIN_EXE_NAME}\command"
  
  ...
  1. nsis检测是否已安装此应用

#此处检测当前是否安装此应用

StrCpy $4 $6 -10
IfFileExists $4\uninst.exe found
      StrCpy $6 ""
      DeleteRegValue ${PRODUCT_UNINST_ROOT_KEY} "${PATH_KEY}" "${PRODUCT_PATHNAME}"
found:
${if} "$INSTDIR${EXE_NAME}" != "$6"
      ${If} "$6" != ""
            StrCpy $BUTTON_NAME "卸载"
            StrCpy $R8 "其他文件下已安装了${PRODUCT_NAME},是否卸载"
            StrCpy $R7 "2"
            Call ShowMsgBox
                   pop $0
                   ${If} $0 == 0
                         goto InstallAbort
                   ${EndIf}
                   ${If} $0 == 1
                          StrCpy $4 $6 -10
                          ExecWait '"$4\uninst.exe"' $0
                          DetailPrint "uninst.exe returned $0"
                          Delete "$6"
                          RMDir $4
                          goto InstallAbort
                   ${EndIf}

      ${EndIf}
${EndIf}

IfFileExists 用来判断文件路径下卸载程序是否还存在,如果存在就继续执行,不存在跳过