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.
diff --git a/nsis/README.txt b/nsis/README.txt
index c0a184d..0d01ec8 100644
--- a/nsis/README.txt
+++ b/nsis/README.txt
@@ -66,6 +66,9 @@
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 498d98d..58ed85c 100644
--- a/nsis/gvim.nsi
+++ b/nsis/gvim.nsi
@@ -119,9 +119,9 @@
!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 @@
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 686fb14..277e317 100644
--- a/src/main.c
+++ b/src/main.c
@@ -162,10 +162,11 @@
}
#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 8140e20..acf0e73 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2822,
+/**/
2821,
/**/
2820,