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,