|
@@ -6,10 +6,23 @@
|
|
|
!define ARCH_TAG "[[arch_tag]]"
|
|
|
!define INSTALLER_NAME "[[ib.installer_name]]"
|
|
|
!define PRODUCT_ICON "[[icon]]"
|
|
|
+
|
|
|
+; Marker file to tell the uninstaller that it's a user installation
|
|
|
+!define USER_INSTALL_MARKER _user_install_marker
|
|
|
|
|
|
SetCompressor lzma
|
|
|
|
|
|
-RequestExecutionLevel admin
|
|
|
+[% if ib.py_format == 'bundled' %]
|
|
|
+!define MULTIUSER_EXECUTIONLEVEL Highest
|
|
|
+!define MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
|
|
|
+!define MULTIUSER_MUI
|
|
|
+!define MULTIUSER_INSTALLMODE_COMMANDLINE
|
|
|
+!define MULTIUSER_INSTALLMODE_INSTDIR "[[ib.appname]]"
|
|
|
+[% if ib.py_bitness == 64 %]
|
|
|
+!define MULTIUSER_INSTALLMODE_FUNCTION correct_prog_files
|
|
|
+[% endif %]
|
|
|
+!include MultiUser.nsh
|
|
|
+[% endif %]
|
|
|
|
|
|
[% block modernui %]
|
|
|
; Modern UI installer stuff
|
|
@@ -20,6 +33,9 @@ RequestExecutionLevel admin
|
|
|
; UI pages
|
|
|
[% block ui_pages %]
|
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
|
+[% if ib.py_format == 'bundled' %]
|
|
|
+!insertmacro MULTIUSER_PAGE_INSTALLMODE
|
|
|
+[% endif %]
|
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
|
!insertmacro MUI_PAGE_FINISH
|
|
@@ -29,7 +45,9 @@ RequestExecutionLevel admin
|
|
|
|
|
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
|
OutFile "${INSTALLER_NAME}"
|
|
|
+[% if ib.py_format != 'bundled' %]
|
|
|
InstallDir "$PROGRAMFILES${BITNESS}\${PRODUCT_NAME}"
|
|
|
+[% endif %]
|
|
|
ShowInstDetails show
|
|
|
|
|
|
Section -SETTINGS
|
|
@@ -42,12 +60,19 @@ SectionEnd
|
|
|
Section "!${PRODUCT_NAME}" sec_app
|
|
|
SetRegView [[ib.py_bitness]]
|
|
|
SectionIn RO
|
|
|
- SetShellVarContext all
|
|
|
File ${PRODUCT_ICON}
|
|
|
SetOutPath "$INSTDIR\pkgs"
|
|
|
File /r "pkgs\*.*"
|
|
|
SetOutPath "$INSTDIR"
|
|
|
|
|
|
+ [% if ib.py_format == 'bundled' %]
|
|
|
+ ; Marker file for per-user install
|
|
|
+ StrCmp $MultiUser.InstallMode CurrentUser 0 +3
|
|
|
+ FileOpen $0 "$INSTDIR\${USER_INSTALL_MARKER}" w
|
|
|
+ FileClose $0
|
|
|
+ SetFileAttributes "$INSTDIR\${USER_INSTALL_MARKER}" HIDDEN
|
|
|
+ [% endif %]
|
|
|
+
|
|
|
[% block install_files %]
|
|
|
; Install files
|
|
|
[% for destination, group in grouped_files %]
|
|
@@ -96,23 +121,23 @@ Section "!${PRODUCT_NAME}" sec_app
|
|
|
nsExec::ExecToLog '[[ python ]] -m compileall -q "$INSTDIR\pkgs"'
|
|
|
WriteUninstaller $INSTDIR\uninstall.exe
|
|
|
; Add ourselves to Add/remove programs
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"DisplayName" "${PRODUCT_NAME}"
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"UninstallString" '"$INSTDIR\uninstall.exe"'
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"InstallLocation" "$INSTDIR"
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"DisplayIcon" "$INSTDIR\${PRODUCT_ICON}"
|
|
|
[% if ib.publisher is not none %]
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"Publisher" "[[ib.publisher]]"
|
|
|
[% endif %]
|
|
|
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"DisplayVersion" "${PRODUCT_VERSION}"
|
|
|
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"NoModify" 1
|
|
|
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
+ WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
|
"NoRepair" 1
|
|
|
|
|
|
; Check if we need to reboot
|
|
@@ -126,6 +151,10 @@ SectionEnd
|
|
|
Section "Uninstall"
|
|
|
SetRegView [[ib.py_bitness]]
|
|
|
SetShellVarContext all
|
|
|
+ IfFileExists "$INSTDIR\${USER_INSTALL_MARKER}" 0 +3
|
|
|
+ SetShellVarContext current
|
|
|
+ Delete "$INSTDIR\${USER_INSTALL_MARKER}"
|
|
|
+
|
|
|
Delete $INSTDIR\uninstall.exe
|
|
|
Delete "$INSTDIR\${PRODUCT_ICON}"
|
|
|
RMDir /r "$INSTDIR\pkgs"
|
|
@@ -159,7 +188,7 @@ Section "Uninstall"
|
|
|
[% endif %]
|
|
|
[% endblock uninstall_shortcuts %]
|
|
|
RMDir $INSTDIR
|
|
|
- DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
|
+ DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
|
SectionEnd
|
|
|
|
|
|
[% endblock sections %]
|
|
@@ -177,3 +206,27 @@ Function .onMouseOverSection
|
|
|
|
|
|
[% endblock mouseover_messages %]
|
|
|
FunctionEnd
|
|
|
+
|
|
|
+[% if ib.py_format == 'bundled' %]
|
|
|
+Function .onInit
|
|
|
+ !insertmacro MULTIUSER_INIT
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+Function un.onInit
|
|
|
+ !insertmacro MULTIUSER_UNINIT
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+[% if ib.py_bitness == 64 %]
|
|
|
+Function correct_prog_files
|
|
|
+ ; The multiuser machinery doesn't know about the different Program files
|
|
|
+ ; folder for 64-bit applications. Override the install dir it set.
|
|
|
+ StrCmp $MultiUser.InstallMode AllUsers 0 +2
|
|
|
+ StrCpy $INSTDIR "$PROGRAMFILES64\${MULTIUSER_INSTALLMODE_INSTDIR}"
|
|
|
+FunctionEnd
|
|
|
+[% endif %]
|
|
|
+
|
|
|
+[% else %]
|
|
|
+Function .onInit
|
|
|
+ SetShellVarContext all
|
|
|
+FunctionEnd
|
|
|
+[% endif %]
|