;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