mixer/install/installer.nsi

210 lines
6.3 KiB
NSIS

;Auto versioning-------------------------------
!makensis "version.nsi"
!system "GetVersion.exe"
!include "Version.txt"
; optional cleanup
!delfile "GetVersion.exe"
!delfile "Version.txt"
;Defines---------------
;!define MULTIUSER_EXECUTIONLEVEL Highest
;Includes--------------------------------
!include "MUI2.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
;!include "MultiUser.nsh"
;--------------------------------
;General
;Name and file
Name "MixerQ"
OutFile "mixerq-installer-${version}.exe"
Unicode True
;Default installation folder
;InstallDir "$LOCALAPPDATA\Modern UI Test"
;Get installation folder from registry if available
;InstallDirRegKey HKCU "Software\Modern UI Test" ""
Var Is_Admin
Var Install_Type
;Request application privileges for UAC. If admin is not available, only user-level install will be available
RequestExecutionLevel highest
!macro ONINIT un
Function ${un}.onInit
; The value of SetShellVarContext detetmines whether SHCTX is HKLM or HKCU
; and whether SMPROGRAMS refers to all users or just the current user
UserInfo::GetAccountType
Pop $0
${If} $0 == "Admin"
; If we're an admin, default to installing to C:\Program Files
;SetShellVarContext all
;StrCpy $INSTDIR_BASE "$PROGRAMFILES64"
StrCpy $Is_Admin "true"
StrCpy $Install_Type "machine"
${Else}
; If we're just a user, default to installing to ~\AppData\Local
;SetShellVarContext current
;StrCpy $INSTDIR_BASE "$LOCALAPPDATA"
StrCpy $Is_Admin "false"
StrCpy $Install_Type "user"
${EndIf}
; ${If} $INSTDIR == ""
; ; This only happens in the installer, because the uninstaller already knows INSTDIR
; ReadRegStr $0 SHCTX "Software\${PRODUCT_NAME}" ""
; ${If} $0 != ""
; ; If we're already installed, use the existing directory
; StrCpy $INSTDIR "$0"
; ${Else}
; StrCpy $INSTDIR "$INSTDIR_BASE\${PRODUCT_NAME}"
; ${Endif}
; ${Endif}
FunctionEnd
!macroend
!insertmacro ONINIT ""
!insertmacro ONINIT "un"
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;--------------------------------
;Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "..\LICENSE.txt"
;!insertmacro MULTIUSER_PAGE_INSTALLMODE
Page Custom InstallTargetPage
;!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;NSDialog InstallTarget Page definition---------------------------------
Function InstallTargetPage
!insertmacro MUI_HEADER_TEXT "Configure Install" "Customize install settings"
nsDialogs::Create 1018
Pop $0
${NSD_CreateLabel} 0 0 100% 10% "Select for whom will $(^Name) be installed: "
Pop $3
${NSD_CreateFirstRadioButton} 0 12% 40% 6% "All users"
Pop $1
${If} $Is_Admin == "false"
EnableWindow $1 0
StrCpy $INSTDIR "$LOCALAPPDATA\$(^Name)"
${Else}
SendMessage $1 ${BM_CLICK} "" "" ;Set default
StrCpy $INSTDIR "$PROGRAMFILES64\$(^Name)"
${EndIf}
${NSD_OnClick} $1 All_Users_Click
${NSD_CreateAdditionalRadioButton} 0 24% 40% 6% "Current user"
Pop $2
${IfThen} $Is_Admin == "false" ${|} SendMessage $2 ${BM_CLICK} "" "" ${|}
${NSD_OnClick} $2 Current_User_Click
nsDialogs::Show
FunctionEnd
Function All_Users_Click
Pop $0
StrCpy $INSTDIR "$PROGRAMFILES64\$(^Name)"
StrCpy $Install_Type "machine"
;${NSD_SetText} $0 "machine"
FunctionEnd
Function Current_User_Click
Pop $0
StrCpy $INSTDIR "$LOCALAPPDATA\$(^Name)"
StrCpy $Install_Type "user"
;${NSD_SetText} $0 "user"
FunctionEnd
;Default section----------------------
Section
SetRegView 64
SetOutPath $INSTDIR
;File "..\build\debug\qtest.exe"
File "..\LICENSE.txt"
;Store installation folder
${If} $Install_Type == "user"
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "DisplayName" "$(^Name)"
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "NoModify" 1
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "NoRepair" 1
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$(^Name)" "$INSTDIR\$(^Name)"
${Else}
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "DisplayName" "$(^Name)"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "NoModify" 1
WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "NoRepair" 1
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$(^Name)" "$INSTDIR\$(^Name)"
${EndIf}
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
;--------------------------------
;Descriptions
; ;Language strings
; LangString DESC_SecDummy ${LANG_ENGLISH} "A test section."
; ;Assign language strings to sections
; !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
; !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
; !insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Section "Uninstall"
SetRegView 64
;ADD YOUR OWN FILES HERE...
Delete "$INSTDIR\qtest.exe"
Delete "$INSTDIR\LICENSE.txt"
Delete "$INSTDIR\Uninstall.exe"
;!define PRODUCT_UNINST_ROOT_KEY "HKLM"
RMDir "$INSTDIR"
${If} $Install_Type == "user"
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$(^Name)"
DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
${Else}
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$(^Name)"
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
${EndIf}
SectionEnd