summaryrefslogtreecommitdiffstats
path: root/nsis/gvim.nsi
diff options
context:
space:
mode:
authorChristopher Plewright <chris@createng.com>2023-02-17 20:04:51 +0000
committerBram Moolenaar <Bram@vim.org>2023-02-17 20:04:51 +0000
commiteea0a00811e8e8e3c2d07964ea61795cce5a4665 (patch)
tree2b09958cfad3e1cf6b4d718a5adcbe855ce246b1 /nsis/gvim.nsi
parentc3a26c6bff666a368b0a22d35d2e00aa62770f8c (diff)
patch 9.0.1316: MS-Windows: vimfiles dir created with admin groupv9.0.1316
Problem: MS-Windows: vimfiles dir created with admin group. Solution: Use ShellExecAsUser to create the vimfiles directory. (Christopher Plewright, Ken Takata, closes #12000, closes #11888)
Diffstat (limited to 'nsis/gvim.nsi')
-rw-r--r--nsis/gvim.nsi43
1 files changed, 33 insertions, 10 deletions
diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi
index 64c1bc76c5..3a6dc29856 100644
--- a/nsis/gvim.nsi
+++ b/nsis/gvim.nsi
@@ -228,6 +228,28 @@ FunctionEnd
!insertmacro GetParent ""
!insertmacro GetParent "un."
+# Get home directory
+!macro GetHomeDir un
+Function ${un}GetHomeDir
+ Push $0
+ Push $1
+ ReadEnvStr $0 "HOME"
+ ${If} $0 == ""
+ ReadEnvStr $0 "HOMEDRIVE"
+ ReadEnvStr $1 "HOMEPATH"
+ StrCpy $0 "$0$1"
+ ${If} $0 == ""
+ ReadEnvStr $0 "USERPROFILE"
+ ${EndIf}
+ ${EndIf}
+ Pop $1
+ Exch $0 # put $0 on top of stack, restore $0 to original value
+FunctionEnd
+!macroend
+
+!insertmacro GetHomeDir ""
+!insertmacro GetHomeDir "un."
+
# Check if Vim is already installed.
# return: Installed directory. If not found, it will be empty.
Function CheckOldVim
@@ -520,7 +542,8 @@ SectionGroup $(str_group_plugin) id_group_plugin
Section "$(str_section_plugin_home)" id_section_pluginhome
SectionIn 1 3
- StrCpy $1 "$1 -create-directories home"
+ # use ShellExecAsUser below instead
+ # StrCpy $1 "$1 -create-directories home"
SectionEnd
Section "$(str_section_plugin_vim)" id_section_pluginvim
@@ -594,6 +617,13 @@ Section -call_install_exe
DetailPrint "$(str_msg_registering)"
nsExec::Exec "$0\install.exe $1"
Pop $3
+
+ ${If} ${SectionIsSelected} ${id_section_pluginhome}
+ ReadEnvStr $3 "COMSPEC"
+ Call GetHomeDir
+ Pop $4
+ ShellExecAsUser::ShellExecAsUser "" "$3" '/c "cd /d "$4" & mkdir vimfiles & cd vimfiles & mkdir colors compiler doc ftdetect ftplugin indent keymap plugin syntax"' SW_HIDE
+ ${EndIf}
SectionEnd
##########################################################
@@ -1042,15 +1072,8 @@ SectionEnd
SectionGroup "un.$(str_ungroup_plugin)" id_ungroup_plugin
Section /o "un.$(str_unsection_plugin_home)" id_unsection_plugin_home
# get the home dir
- ReadEnvStr $0 "HOME"
- ${If} $0 == ""
- ReadEnvStr $0 "HOMEDRIVE"
- ReadEnvStr $1 "HOMEPATH"
- StrCpy $0 "$0$1"
- ${If} $0 == ""
- ReadEnvStr $0 "USERPROFILE"
- ${EndIf}
- ${EndIf}
+ Call un.GetHomeDir
+ Pop $0
${If} $0 != ""
!insertmacro RemoveVimfiles $0