summaryrefslogtreecommitdiff
path: root/indra/newview/installers/windows
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2018-10-29 17:17:26 -0400
committerNat Goodspeed <nat@lindenlab.com>2018-10-29 17:17:26 -0400
commita5f492acf19664593b040a8cdff1e5e251f65dba (patch)
tree77b78022fb5138f7d6577ae692fe09802c558bae /indra/newview/installers/windows
parent810cebe967b75c6ba6428e0bdf8fc2fabf8379e5 (diff)
SL-9980: Launch the first-run updater via explorer.exe as we used to
run the viewer from the installer. Turns out that the peculiar indirection through explorer.exe was a known trick for an elevated-privileges program to launch a program as the logged-in Windows user. (They could have commented that...) But explorer.exe doesn't pass command-line parameters, so if you want to pass any such to the actual target program, you have to launch a shortcut with those parameters. But this target program (the updater) and its parameters (precheck mumble) are specific to the very first viewer run after installation, so delete it after. Having an additional permanent icon that always runs the updater before the viewer would only confuse matters.
Diffstat (limited to 'indra/newview/installers/windows')
-rw-r--r--indra/newview/installers/windows/installer_template.nsi13
1 files changed, 12 insertions, 1 deletions
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 76187b49a5..adcf8fd0e4 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -705,10 +705,21 @@ Function .onInstSuccess
# updater can detect the problem and adapt accordingly.
# Once everything is in order, the updater will run the specified
# viewer with the specified params.
+ # 'Exec updater' causes the viewer to inherit elevated Admin privileges. See
+ # http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html
+ # for workaround: running the updater via explorer.exe.
+ # Thing is, you can't pass parameters with the explorer.exe trick, so
+ # you have to create a shortcut or a .bat file. Since we don't want a
+ # permanent shortcut for the user to relaunch the updater like this
+ # first time, create it in a temp location and delete it once we've
+ # used it.
# Quote the updater executable and the viewer executable because each
# must be a distinct command-line token, but DO NOT quote the language
# string because it must decompose into separate command-line tokens.
- Exec '"$INSTDIR\$INSTEXE" precheck "$INSTDIR\$VIEWER_EXE" $SHORTCUT_LANG_PARAM'
+ CreateShortCut "$TEMP\SLFirst.lnk" "$INSTDIR\$INSTEXE" \
+ 'precheck "$INSTDIR\$VIEWER_EXE" $SHORTCUT_LANG_PARAM'
+ Exec '"$WINDIR\explorer.exe" "$TEMP\SLFirst.lnk"'
+ Delete "$TEMP\SLFirst.lnk"
Pop $R0
#
FunctionEnd