updating support in win32 installer

pull/1705/head
antelle 2 years ago
parent 28c708f599
commit 890f998fe0
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C

@ -1,21 +1,29 @@
!macro EnsureAppIsNotRunning
${Do}
nsExec::ExecToStack /OEM 'tasklist /NH /FI "IMAGENAME eq ${PRODUCT_EXE}"'
Pop $0
${If} $0 != 0
DetailPrint "Error checking ${PRODUCT_EXE}: $0"
!macro EnsureAppIsNotRunning
Var /GLOBAL retryNumEnsureAppIsNotRunning
${For} $retryNumEnsureAppIsNotRunning 0 1000
DetailPrint "Checking if ${PRODUCT_EXE} is running..."
nsExec::ExecToStack /OEM 'tasklist /NH /FI "IMAGENAME eq ${PRODUCT_EXE}"'
Pop $0
${If} $0 != 0
DetailPrint "Error checking ${PRODUCT_EXE}: $0"
MessageBox MB_ICONSTOP|MB_OK "Failed to check whether process is running" /SD IDOK
Quit
${EndIf}
Pop $1
Quit
${EndIf}
Pop $1
${StrStr} $0 $1 "${PRODUCT_EXE}"
${If} $0 == ""
DetailPrint "${PRODUCT_EXE} is not running"
${ExitDo}
${Else}
MessageBox MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON1 "To proceed, please close ${PRODUCT_NAME} and click OK" /SD IDCANCEL IDOK ok
Quit
ok:
${EndIf}
${Loop}
!macroend
${If} $0 == ""
DetailPrint "${PRODUCT_EXE} is not running"
${ExitFor}
${Else}
${If} $isUpdaterMode == 1
${AndIf} $retryNumEnsureAppIsNotRunning < 5
DetailPrint "${PRODUCT_EXE} is running, waiting..."
Sleep 1000
${Else}
MessageBox MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON1 "To proceed, please close ${PRODUCT_NAME} and click OK" /SD IDCANCEL IDOK ok
Quit
ok:
${EndIf}
${EndIf}
${Next}
!macroend

@ -1,20 +1,22 @@
!define PRODUCT_NAME "KeeWeb"
!define PRODUCT_VERSION "${version}"
!define PRODUCT_PUBLISHER "KeeWeb"
!define PRODUCT_WEB_SITE "${homepage}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
Unicode True
!define PRODUCT_NAME "KeeWeb"
!define PRODUCT_VERSION "${version}"
!define PRODUCT_PUBLISHER "KeeWeb"
!define PRODUCT_WEB_SITE "${homepage}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_EXE "KeeWeb.exe"
!define PRODUCT_UNINST_TEMP_EXE "KeeWebUninst.exe"
!define MUI_ABORTWARNING
!define MUI_ABORTWARNING
!define MUI_ICON "graphics\icon.ico"
!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
!define MULTIUSER_EXECUTIONLEVEL Highest
!define MULTIUSER_MUI
!define MULTIUSER_INSTALLMODE_COMMANDLINE
!define MULTIUSER_EXECUTIONLEVEL Highest
!define MULTIUSER_MUI
!define MULTIUSER_INSTALLMODE_COMMANDLINE
SetCompressor lzma
Name "${PRODUCT_NAME}"
OutFile "${output}"

@ -1,10 +1,11 @@
!include MultiUser.nsh
!include MUI2.nsh
!include Util.nsh
!include x64.nsh
!include nsDialogs.nsh
!include MultiUser.nsh
!include MUI2.nsh
!include Util.nsh
!include x64.nsh
!include nsDialogs.nsh
!include LogicLib.nsh
!include StrFunc.nsh
!include WinVer.nsh
!include FileFunc.nsh
!include package\nsis\lib\FileAssoc.nsh

@ -7,22 +7,35 @@
!define MUI_FINISHPAGE_SHOWREADME_TEXT "Create a Shortcut on Desktop"
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION FinishPageCheckboxCheckedAction
!define MUI_PAGE_CUSTOMFUNCTION_PRE AbortIfInUpdaterMode
!insertmacro MUI_PAGE_WELCOME
#!insertmacro MULTIUSER_PAGE_INSTALLMODE
!define MUI_PAGE_CUSTOMFUNCTION_PRE AbortIfInUpdaterMode
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_PRE AbortIfInUpdaterMode
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
Var /GLOBAL isUpdaterMode
Function .onInit
${GetOptions} $CMDLINE "/U" $isUpdaterMode
${If} ${IsNativeAMD64}
${If} ${arch} != "x64"
MessageBox MB_ICONSTOP|MB_OK "Please use a 64-bit installer on a 64-bit system"
Quit
${EndIf}
SetRegView 64
StrCpy $InstDir "$PROGRAMFILES64\${PRODUCT_NAME}"
${If} $isUpdaterMode != 1
StrCpy $InstDir "$PROGRAMFILES64\${PRODUCT_NAME}"
${EndIf}
${EndIf}
${If} ${IsNativeARM64}
@ -30,7 +43,9 @@ Function .onInit
MessageBox MB_ICONSTOP|MB_OK "Please use an ARM64 installer on an ARM64 system"
Quit
${EndIf}
StrCpy $InstDir "$PROGRAMFILES64\${PRODUCT_NAME}"
${If} $isUpdaterMode != 1
StrCpy $InstDir "$PROGRAMFILES64\${PRODUCT_NAME}"
${EndIf}
${EndIf}
${If} ${IsNativeIA32}
@ -55,6 +70,12 @@ Function .onInit
!insertmacro MULTIUSER_INIT
FunctionEnd
Function AbortIfInUpdaterMode
${If} $isUpdaterMode == 1
abort
${EndIf}
FunctionEnd
Function FinishPageCheckboxCheckedAction
CreateShortCut "$DESKTOP\KeeWeb.lnk" "$INSTDIR\${PRODUCT_EXE}"
FunctionEnd
@ -64,20 +85,22 @@ Section "MainSection" SEC01
SetOverwrite on
ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
${If} $R0 != ""
CopyFiles "$R0" "$TEMP\${PRODUCT_UNINST_TEMP_EXE}"
ExecWait '"$TEMP\${PRODUCT_UNINST_TEMP_EXE}" /S'
${EndIf}
${If} $isUpdaterMode != 1
ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
${If} $R0 != ""
CopyFiles "$R0" "$TEMP\${PRODUCT_UNINST_TEMP_EXE}"
ExecWait '"$TEMP\${PRODUCT_UNINST_TEMP_EXE}" /S'
${EndIf}
ReadRegStr $R0 "HKCU" "${PRODUCT_UNINST_KEY}" "QuietUninstallString"
${If} $R0 != ""
ExecWait '$R0'
${EndIf}
ReadRegStr $R0 "HKCU" "${PRODUCT_UNINST_KEY}" "QuietUninstallString"
${If} $R0 != ""
ExecWait '$R0'
${EndIf}
ReadRegStr $R0 "HKCU" "${PRODUCT_UNINST_KEY}" "UninstallString"
${If} $R0 != ""
ExecWait '$R0'
ReadRegStr $R0 "HKCU" "${PRODUCT_UNINST_KEY}" "UninstallString"
${If} $R0 != ""
ExecWait '$R0'
${EndIf}
${EndIf}
SetOutPath "$INSTDIR"
@ -85,21 +108,28 @@ Section "MainSection" SEC01
File /r "tmp\desktop\KeeWeb-win32-${arch}\*"
Delete "$INSTDIR\resources\app\*.*"
RMDir /r "$INSTDIR\resources\app"
CreateDirectory "$SMPROGRAMS\KeeWeb"
CreateShortCut "$SMPROGRAMS\KeeWeb\KeeWeb.lnk" "$INSTDIR\${PRODUCT_EXE}"
!insertmacro APP_ASSOCIATE "kdbx" "kdbxfile" "KeePass Password Database" \
"$INSTDIR\${PRODUCT_EXE},0" "Open with KeeWeb" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
!insertmacro UPDATEFILEASSOC
${If} $isUpdaterMode != 1
CreateDirectory "$SMPROGRAMS\KeeWeb"
CreateShortCut "$SMPROGRAMS\KeeWeb\KeeWeb.lnk" "$INSTDIR\${PRODUCT_EXE}"
!insertmacro APP_ASSOCIATE "kdbx" "kdbxfile" "KeePass Password Database" \
"$INSTDIR\${PRODUCT_EXE},0" "Open with KeeWeb" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
!insertmacro UPDATEFILEASSOC
${EndIf}
SectionEnd
Section -Post
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"'
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "QuietUninstallString" '"$INSTDIR\uninst.exe" /S'
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallDir" "$INSTDIR"
${If} $isUpdaterMode == 1
Exec '"$WINDIR\explorer.exe" "$INSTDIR\${PRODUCT_EXE}"'
${Else}
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"'
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "QuietUninstallString" '"$INSTDIR\uninst.exe" /S'
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallDir" "$INSTDIR"
${EndIf}
SectionEnd

Loading…
Cancel
Save