mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Upload windows NSIS installer script
This commit is contained in:
parent
96f7a9e2c5
commit
e111b8ee90
329
windows/qtox.nsi
Normal file
329
windows/qtox.nsi
Normal file
|
@ -0,0 +1,329 @@
|
|||
###################
|
||||
#META
|
||||
###################
|
||||
!define APP_NAME "qTox"
|
||||
!define COMP_NAME "Tox"
|
||||
!define WEB_SITE "https://github.com/tux3/qTox"
|
||||
!define VERSION "1.0.0.0"
|
||||
!define DESCRIPTION "qTox Installer"
|
||||
!define COPYRIGHT "The Tox Project"
|
||||
!define INSTALLER_NAME "setup-qtox.exe"
|
||||
!define MAIN_APP_EXE "bin\qtox.exe"
|
||||
!define INSTALL_TYPE "SetShellVarContext current"
|
||||
!define REG_ROOT "HKLM"
|
||||
!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
|
||||
!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
|
||||
!define REG_START_MENU "Start Menu Folder"
|
||||
var SM_Folder
|
||||
|
||||
Name "${APP_NAME}"
|
||||
Caption "${APP_NAME}"
|
||||
OutFile "${INSTALLER_NAME}"
|
||||
BrandingText "${APP_NAME}"
|
||||
InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
|
||||
InstallDir "$PROGRAMFILES\${APP_NAME}"
|
||||
SetCompressor /SOLID lzma
|
||||
|
||||
VIProductVersion "${VERSION}"
|
||||
VIAddVersionKey "ProductName" "${APP_NAME}"
|
||||
VIAddVersionKey "CompanyName" "${COMP_NAME}"
|
||||
VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
|
||||
VIAddVersionKey "FileDescription" "${DESCRIPTION}"
|
||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
||||
|
||||
##############
|
||||
#MODERN UI
|
||||
##############
|
||||
!include "MUI.nsh"
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_FINISHPAGE_NOAUTOCLOSE
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!ifdef REG_START_MENU
|
||||
!define MUI_STARTMENUPAGE_NODISABLE
|
||||
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "qTox"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder
|
||||
!endif
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}"
|
||||
!define MUI_FINISHPAGE_LINK "Find qTox on GitHub"
|
||||
!define MUI_FINISHPAGE_LINK_LOCATION "https://github.com/tux3/qTox"
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!define MUI_UNABORTWARNING
|
||||
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
|
||||
!insertmacro MUI_UNPAGE_WELCOME
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_FINISH
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
##############
|
||||
#UNINSTALL LOG
|
||||
##############
|
||||
;AddItem macro
|
||||
!macro AddItem Path
|
||||
FileWrite $UninstLog "${Path}$\r$\n"
|
||||
!macroend
|
||||
|
||||
;File macro
|
||||
!macro File FileName
|
||||
IfFileExists "$OUTDIR\${FileName}" +2
|
||||
FileWrite $UninstLog "$OUTDIR\${FileName}$\r$\n"
|
||||
File "${FileName}"
|
||||
!macroend
|
||||
|
||||
;CreateShortcut macro
|
||||
!macro CreateShortcut FilePath FilePointer Pamameters Icon IconIndex
|
||||
FileWrite $UninstLog "${FilePath}$\r$\n"
|
||||
CreateShortcut "${FilePath}" "${FilePointer}" "${Pamameters}" "${Icon}" "${IconIndex}"
|
||||
!macroend
|
||||
|
||||
;Copy files macro
|
||||
!macro CopyFiles SourcePath DestPath
|
||||
IfFileExists "${DestPath}" +2
|
||||
FileWrite $UninstLog "${DestPath}$\r$\n"
|
||||
CopyFiles "${SourcePath}" "${DestPath}"
|
||||
!macroend
|
||||
|
||||
;Rename macro
|
||||
!macro Rename SourcePath DestPath
|
||||
IfFileExists "${DestPath}" +2
|
||||
FileWrite $UninstLog "${DestPath}$\r$\n"
|
||||
Rename "${SourcePath}" "${DestPath}"
|
||||
!macroend
|
||||
|
||||
;CreateDirectory macro
|
||||
!macro CreateDirectory Path
|
||||
CreateDirectory "${Path}"
|
||||
FileWrite $UninstLog "${Path}$\r$\n"
|
||||
!macroend
|
||||
|
||||
;SetOutPath macro
|
||||
!macro SetOutPath Path
|
||||
SetOutPath "${Path}"
|
||||
FileWrite $UninstLog "${Path}$\r$\n"
|
||||
!macroend
|
||||
|
||||
;WriteUninstaller macro
|
||||
!macro WriteUninstaller Path
|
||||
WriteUninstaller "${Path}"
|
||||
FileWrite $UninstLog "${Path}$\r$\n"
|
||||
!macroend
|
||||
|
||||
;WriteIniStr macro
|
||||
!macro WriteIniStr IniFile SectionName EntryName NewValue
|
||||
IfFileExists "${IniFile}" +2
|
||||
FileWrite $UninstLog "${IniFile}$\r$\n"
|
||||
WriteIniStr "${IniFile}" "${SectionName}" "${EntryName}" "${NewValue}"
|
||||
!macroend
|
||||
|
||||
;WriteRegStr macro
|
||||
!macro WriteRegStr RegRoot UnInstallPath Key Value
|
||||
FileWrite $UninstLog "${RegRoot} ${UnInstallPath}$\r$\n"
|
||||
WriteRegStr "${RegRoot}" "${UnInstallPath}" "${Key}" "${Value}"
|
||||
!macroend
|
||||
|
||||
|
||||
;WriteRegDWORD macro
|
||||
!macro WriteRegDWORD RegRoot UnInstallPath Key Value
|
||||
FileWrite $UninstLog "${RegRoot} ${UnInstallPath}$\r$\n"
|
||||
WriteRegDWORD "${RegRoot}" "${UnInstallPath}" "${Key}" "${Value}"
|
||||
!macroend
|
||||
|
||||
;BackupFile macro
|
||||
!macro BackupFile FILE_DIR FILE BACKUP_TO
|
||||
IfFileExists "${BACKUP_TO}\*.*" +2
|
||||
CreateDirectory "${BACKUP_TO}"
|
||||
IfFileExists "${FILE_DIR}\${FILE}" 0 +2
|
||||
Rename "${FILE_DIR}\${FILE}" "${BACKUP_TO}\${FILE}"
|
||||
!macroend
|
||||
|
||||
;RestoreFile macro
|
||||
!macro RestoreFile BUP_DIR FILE RESTORE_TO
|
||||
IfFileExists "${BUP_DIR}\${FILE}" 0 +2
|
||||
Rename "${BUP_DIR}\${FILE}" "${RESTORE_TO}\${FILE}"
|
||||
!macroend
|
||||
|
||||
;BackupFiles macro
|
||||
!macro BackupFiles FILE_DIR FILE BACKUP_TO
|
||||
IfFileExists "${BACKUP_TO}\*.*" +2
|
||||
CreateDirectory "22222"
|
||||
IfFileExists "${FILE_DIR}\${FILE}" 0 +7
|
||||
FileWrite $UninstLog "${FILE_DIR}\${FILE}$\r$\n"
|
||||
FileWrite $UninstLog "${BACKUP_TO}\${FILE}$\r$\n"
|
||||
FileWrite $UninstLog "FileBackup$\r$\n"
|
||||
Rename "${FILE_DIR}\${FILE}" "${BACKUP_TO}\${FILE}"
|
||||
SetOutPath "${FILE_DIR}"
|
||||
File "${FILE}" #After the Original file is backed up write the new file.
|
||||
!macroend
|
||||
|
||||
;RestoreFiles macro
|
||||
!macro RestoreFiles BUP_FILE RESTORE_FILE
|
||||
IfFileExists "${BUP_FILE}" 0 +2
|
||||
CopyFiles "${BUP_FILE}" "${RESTORE_FILE}"
|
||||
!macroend
|
||||
|
||||
###################
|
||||
#PREPARE UNINST LOG
|
||||
###################
|
||||
;Set the name of the uninstall log
|
||||
!define UninstLog "uninstall.log"
|
||||
Var UninstLog
|
||||
|
||||
;Uninstall log file missing.
|
||||
LangString UninstLogMissing ${LANG_ENGLISH} "${UninstLog} not found!$\r$\nUninstallation cannot proceed!"
|
||||
|
||||
;AddItem macro
|
||||
!define AddItem "!insertmacro AddItem"
|
||||
|
||||
;BackupFile macro
|
||||
!define BackupFile "!insertmacro BackupFile"
|
||||
|
||||
;BackupFiles macro
|
||||
!define BackupFiles "!insertmacro BackupFiles"
|
||||
|
||||
;Copy files macro
|
||||
!define CopyFiles "!insertmacro CopyFiles"
|
||||
|
||||
;CreateDirectory macro
|
||||
!define CreateDirectory "!insertmacro CreateDirectory"
|
||||
|
||||
;CreateShortcut macro
|
||||
!define CreateShortcut "!insertmacro CreateShortcut"
|
||||
|
||||
;File macro
|
||||
!define File "!insertmacro File"
|
||||
|
||||
;Rename macro
|
||||
!define Rename "!insertmacro Rename"
|
||||
|
||||
;RestoreFile macro
|
||||
!define RestoreFile "!insertmacro RestoreFile"
|
||||
|
||||
;RestoreFiles macro
|
||||
!define RestoreFiles "!insertmacro RestoreFiles"
|
||||
|
||||
;SetOutPath macro
|
||||
!define SetOutPath "!insertmacro SetOutPath"
|
||||
|
||||
;WriteRegDWORD macro
|
||||
!define WriteRegDWORD "!insertmacro WriteRegDWORD"
|
||||
|
||||
;WriteRegStr macro
|
||||
!define WriteRegStr "!insertmacro WriteRegStr"
|
||||
|
||||
;WriteUninstaller macro
|
||||
!define WriteUninstaller "!insertmacro WriteUninstaller"
|
||||
|
||||
Section -openlogfile
|
||||
CreateDirectory "$INSTDIR"
|
||||
IfFileExists "$INSTDIR\${UninstLog}" +3
|
||||
FileOpen $UninstLog "$INSTDIR\${UninstLog}" w
|
||||
Goto +4
|
||||
SetFileAttributes "$INSTDIR\${UninstLog}" NORMAL
|
||||
FileOpen $UninstLog "$INSTDIR\${UninstLog}" a
|
||||
FileSeek $UninstLog 0 END
|
||||
SectionEnd
|
||||
|
||||
#################
|
||||
#INSTALL
|
||||
#################
|
||||
Section "Install"
|
||||
# Install files
|
||||
${SetOutPath} "$INSTDIR"
|
||||
${WriteUninstaller} "uninstall.exe"
|
||||
|
||||
${CreateDirectory} "bin"
|
||||
${SetOutPath} "$INSTDIR\bin"
|
||||
${File} "qTox-win32\*.*"
|
||||
|
||||
${CreateDirectory} "imageformats"
|
||||
${SetOutPath} "$INSTDIR\bin\imageformats"
|
||||
${File} "qTox-win32\imageformats\*.*"
|
||||
${SetOutPath} "$INSTDIR\bin"
|
||||
|
||||
${CreateDirectory} "platforms"
|
||||
${SetOutPath} "$INSTDIR\bin\platforms"
|
||||
${File} "qTox-win32\platforms\*.*"
|
||||
${SetOutPath} "$INSTDIR\bin"
|
||||
|
||||
${CreateDirectory} "sqldrivers"
|
||||
${SetOutPath} "$INSTDIR\bin\sqldrivers"
|
||||
${File} "qTox-win32\sqldrivers\*.*"
|
||||
${SetOutPath} "$INSTDIR\bin"
|
||||
|
||||
# Create shortcuts
|
||||
${CreateDirectory} "$SMPROGRAMS\qTox"
|
||||
${CreateShortCut} "$SMPROGRAMS\qTox\qTox.lnk" "$INSTDIR\${MAIN_APP_EXE}" "" "" ""
|
||||
${CreateShortCut} "$SMPROGRAMS\qTox\Uninstall qTox.lnk" "$INSTDIR\uninstall.exe" "" "" ""
|
||||
|
||||
# Write setup info into the registry
|
||||
${WriteRegStr} "${REG_ROOT}" "${REG_APP_PATH}" "Install Directory" "$INSTDIR"
|
||||
${WriteRegStr} ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
|
||||
SectionEnd
|
||||
|
||||
|
||||
################
|
||||
#UNINSTALL
|
||||
################
|
||||
Section Uninstall
|
||||
;If there's no uninstall log, we'll try anyway to clean what we can
|
||||
IfFileExists "$INSTDIR\${UninstLog}" +3
|
||||
Goto noLog
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
SetFileAttributes "$INSTDIR\${UninstLog}" NORMAL
|
||||
FileOpen $UninstLog "$INSTDIR\${UninstLog}" r
|
||||
StrCpy $R1 -1
|
||||
|
||||
GetLineCount:
|
||||
ClearErrors
|
||||
FileRead $UninstLog $R0
|
||||
IntOp $R1 $R1 + 1
|
||||
StrCpy $R0 $R0 -2
|
||||
Push $R0
|
||||
IfErrors 0 GetLineCount
|
||||
|
||||
Pop $R0
|
||||
|
||||
LoopRead:
|
||||
StrCmp $R1 0 LoopDone
|
||||
Pop $R0
|
||||
|
||||
IfFileExists "$R0\*.*" 0 +3
|
||||
RMDir $R0 #is dir
|
||||
Goto +9
|
||||
IfFileExists $R0 0 +3
|
||||
Delete $R0 #is file
|
||||
Goto +6
|
||||
StrCmp $R0 "${REG_ROOT} ${REG_APP_PATH}" 0 +3
|
||||
DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}" #is Reg Element
|
||||
Goto +3
|
||||
StrCmp $R0 "${REG_ROOT} ${UNINSTALL_PATH}" 0 +2
|
||||
DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}" #is Reg Element
|
||||
|
||||
IntOp $R1 $R1 - 1
|
||||
Goto LoopRead
|
||||
LoopDone:
|
||||
FileClose $UninstLog
|
||||
Delete "$INSTDIR\${UninstLog}"
|
||||
noLog:
|
||||
Delete /REBOOTOK "$INSTDIR\uninstall.exe"
|
||||
RMDir /r /REBOOTOK $INSTDIR\bin"
|
||||
RMDir /REBOOTOK "$INSTDIR"
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
;Remove registry keys
|
||||
;DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
|
||||
;DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
|
||||
SectionEnd
|
Loading…
Reference in New Issue
Block a user