From 4a22897591dc8ff64560bef693af49f171faf557 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 1 May 2021 22:41:39 +0200 Subject: [PATCH] patch 8.2.2822: MS-Windows: unnessarily loading libraries when unregistering Problem: MS-Windows: unnessarily loading libraries when unregistering OLE. Solution: Also skip loading libraries when invoked with "-unregister". Run Vim for README.txt with user privileges. --- nsis/README.txt | 3 +++ nsis/gvim.nsi | 9 +++++++-- src/main.c | 7 ++++--- src/version.c | 2 ++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/nsis/README.txt b/nsis/README.txt index c0a184d6a3..0d01ec86db 100644 --- a/nsis/README.txt +++ b/nsis/README.txt @@ -66,6 +66,9 @@ To build the installable .exe: Install NSIS if you didn't do that already. Also install UPX, if you want a compressed file. +Download and include the ShellExecAsUser.dll Unicode version which can be +sourced from: https://nsis.sourceforge.io/ShellExecAsUser_plug-in + Unpack the images: cd nsis diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi index 498d98dc84..58ed85c5eb 100644 --- a/nsis/gvim.nsi +++ b/nsis/gvim.nsi @@ -119,9 +119,9 @@ RequestExecutionLevel highest !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_LICENSEPAGE_CHECKBOX -!define MUI_FINISHPAGE_RUN "$0\gvim.exe" +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication !define MUI_FINISHPAGE_RUN_TEXT $(str_show_readme) -!define MUI_FINISHPAGE_RUN_PARAMETERS "-R $\"$0\README.txt$\"" # This adds '\Vim' to the user choice automagically. The actual value is # obtained below with CheckOldVim. @@ -300,6 +300,11 @@ Function CheckOldVim Exch $0 # put $0 on top of stack, restore $0 to original value FunctionEnd +Function LaunchApplication + SetOutPath $0 + ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" "-R $"$0\README.txt$"" +FunctionEnd + ########################################################## Section "$(str_section_old_ver)" id_section_old_ver SectionIn 1 2 3 RO diff --git a/src/main.c b/src/main.c index 686fb14324..277e31790b 100644 --- a/src/main.c +++ b/src/main.c @@ -162,10 +162,11 @@ main } #endif #ifdef MSWIN - // Need to find "-register" before loading any libraries. + // Need to find "-register" and "-unregister" before loading any libraries. for (i = 1; i < argc; ++i) - if (STRICMP(argv[i] + 1, "register") == 0 - && (argv[i][0] == '-' || argv[i][0] == '/')) + if ((STRICMP(argv[i] + 1, "register") == 0 + || STRICMP(argv[i] + 1, "unregister") == 0) + && (argv[i][0] == '-' || argv[i][0] == '/')) { found_register_arg = TRUE; break; diff --git a/src/version.c b/src/version.c index 8140e20fa7..acf0e73938 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2822, /**/ 2821, /**/