# HG changeset patch # User Bram Moolenaar # Date 1280606624 -7200 # Node ID 943280505f72eb169e6a7af5d45ff674af9c8d29 # Parent 628147a4b3b285bc0dec1d9300e438acdce8cc61 Fix that uninstaller isn't found on 64-bit Windows. diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi --- a/nsis/gvim.nsi +++ b/nsis/gvim.nsi @@ -450,7 +450,7 @@ Section Uninstall AskRemove: MessageBox MB_YESNO|MB_ICONQUESTION \ "Remove all files in your $1\vimfiles directory? \ - $\nIf you have created something there that you want to keep, click No" IDNO Fin + $\nCAREFUL: If you have created something there that you want to keep, click No" IDNO Fin RMDir /r $1\vimfiles NoRemove: diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -30,10 +30,6 @@ be worked on, but only if you sponsor Vi *known-bugs* -------------------- Known bugs and current work ----------------------- -Windows 7: installing Vim again doesn't find the previously installed Vim. - -Move more common code from if_python.c and if_python3.c to if_py_both.h - Before release 7.3: - Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23) diff --git a/src/dosinst.c b/src/dosinst.c --- a/src/dosinst.c +++ b/src/dosinst.c @@ -462,8 +462,8 @@ uninstall_check(int skip_question) DWORD new_num_keys; int foundone = 0; - code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, uninstall_key, 0, KEY_READ, - &key_handle); + code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, uninstall_key, 0, + KEY_WOW64_64KEY | KEY_READ, &key_handle); CHECK_REG_ERROR(code); for (key_index = 0; @@ -475,8 +475,8 @@ uninstall_check(int skip_question) if (strncmp("Vim", subkey_name_buff, 3) == 0) { /* Open the key named Vim* */ - code = RegOpenKeyEx(key_handle, subkey_name_buff, 0, KEY_READ, - &uninstall_key_handle); + code = RegOpenKeyEx(key_handle, subkey_name_buff, 0, + KEY_WOW64_64KEY | KEY_READ, &uninstall_key_handle); CHECK_REG_ERROR(code); /* get the DisplayName out of it to show the user */ @@ -1352,14 +1352,6 @@ init_vimrc_choices(void) } #if defined(WIN3264) -/* - * Modern way of creating registry entries, also works on 64 bit windows when - * compiled as a 32 bit program. - */ -# ifndef KEY_WOW64_64KEY -# define KEY_WOW64_64KEY 0x0100 -# endif - static LONG reg_create_key( HKEY root, diff --git a/src/dosinst.h b/src/dosinst.h --- a/src/dosinst.h +++ b/src/dosinst.h @@ -83,6 +83,14 @@ char *searchpath(char *name); # define TRUE 1 #endif +/* + * Modern way of creating registry entries, also works on 64 bit windows when + * compiled as a 32 bit program. + */ +# ifndef KEY_WOW64_64KEY +# define KEY_WOW64_64KEY 0x0100 +# endif + #define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT int interactive; /* non-zero when running interactively */ diff --git a/src/if_ole.cpp b/src/if_ole.cpp --- a/src/if_ole.cpp +++ b/src/if_ole.cpp @@ -50,14 +50,6 @@ WINOLEAUTAPI UnRegisterTypeLib(REFGUID l WORD wVerMinor, LCID lcid, SYSKIND syskind); #endif -/* - * Modern way of creating registry entries, also works on 64 bit windows when - * compiled as a 32 bit program. - */ -# ifndef KEY_WOW64_64KEY -# define KEY_WOW64_64KEY 0x0100 -# endif - /***************************************************************************** 1. Internal definitions for this file *****************************************************************************/ @@ -166,7 +158,7 @@ CVim *CVim::Create(int *pbDoRestart) // RegCreateKeyEx succeeds even if key exists. W.Briscoe W2K 20021011 if (RegCreateKeyEx(HKEY_CLASSES_ROOT, MYVIPROGID, 0, NULL, REG_OPTION_NON_VOLATILE, - KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL, &hKey, NULL)) + KEY_ALL_ACCESS, NULL, &hKey, NULL)) { delete me; return NULL; // Unable to write to registry. Quietly fail. @@ -658,7 +650,8 @@ static void RecursiveDeleteKey(HKEY hKey { // Open the child HKEY hKeyChild; - LONG result = RegOpenKeyEx(hKeyParent, child, 0, KEY_ALL_ACCESS, &hKeyChild); + LONG result = RegOpenKeyEx(hKeyParent, child, 0, + KEY_ALL_ACCESS, &hKeyChild); if (result != ERROR_SUCCESS) return; @@ -701,7 +694,7 @@ static void SetKeyAndValue(const char *k long result = RegCreateKeyEx(HKEY_CLASSES_ROOT, buffer, 0, NULL, REG_OPTION_NON_VOLATILE, - KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL, + KEY_ALL_ACCESS, NULL, &hKey, NULL); if (result != ERROR_SUCCESS) return; diff --git a/src/uninstal.c b/src/uninstal.c --- a/src/uninstal.c +++ b/src/uninstal.c @@ -46,8 +46,8 @@ popup_gvim_path(char *buf) int r; /* Open the key where the path to gvim.exe is stored. */ - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0, KEY_READ, - &key_handle) != ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0, + KEY_WOW64_64KEY | KEY_READ, &key_handle) != ERROR_SUCCESS) return 0; /* get the DisplayName out of it to show the user */ @@ -72,8 +72,8 @@ openwith_gvim_path(char *buf) /* Open the key where the path to gvim.exe is stored. */ if (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\gvim.exe\\shell\\edit\\command", 0, KEY_READ, - &key_handle) != ERROR_SUCCESS) + "Applications\\gvim.exe\\shell\\edit\\command", 0, + KEY_WOW64_64KEY | KEY_READ, &key_handle) != ERROR_SUCCESS) return 0; /* get the DisplayName out of it to show the user */ @@ -95,7 +95,8 @@ remove_popup(void) ++fail; if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim") != ERROR_SUCCESS) ++fail; - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0, KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0, + KEY_WOW64_64KEY | KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS) ++fail; else {