Windows uninstaller: Instead of calling RegDeleteKeyEx() directly load it
dynamically from the .dll. Should work everywhere.
This commit is contained in:
@ -33,6 +33,10 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
|||||||
Using uninitialized memory when crypting an empty file. (Dominique Pelle, 2010
|
Using uninitialized memory when crypting an empty file. (Dominique Pelle, 2010
|
||||||
Aug 2)
|
Aug 2)
|
||||||
|
|
||||||
|
Go back to MSVC 2008, so that Windows 2000 is supported?
|
||||||
|
|
||||||
|
For 'undoreload': put the cursor on the first line that is different.
|
||||||
|
|
||||||
Before release 7.3:
|
Before release 7.3:
|
||||||
- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
|
- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
|
||||||
|
|
||||||
|
|||||||
@ -89,7 +89,6 @@ char *searchpath(char *name);
|
|||||||
*/
|
*/
|
||||||
# ifndef KEY_WOW64_64KEY
|
# ifndef KEY_WOW64_64KEY
|
||||||
# define KEY_WOW64_64KEY 0x0100
|
# define KEY_WOW64_64KEY 0x0100
|
||||||
# define RegDeleteKeyEx(a, b, c, d) RegDeleteKey(a, b)
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT
|
#define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT
|
||||||
|
|||||||
@ -33,6 +33,30 @@ confirm(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN3264
|
#ifdef WIN3264
|
||||||
|
|
||||||
|
static int
|
||||||
|
reg_delete_key(HKEY hRootKey, const char *key)
|
||||||
|
{
|
||||||
|
static int did_load = FALSE;
|
||||||
|
static HANDLE advapi_lib = NULL;
|
||||||
|
static LONG (WINAPI *delete_key_ex)(HKEY, LPCTSTR, REGSAM, DWORD) = NULL;
|
||||||
|
|
||||||
|
if (!did_load)
|
||||||
|
{
|
||||||
|
/* The RegDeleteKeyEx() function is only available on new systems. It
|
||||||
|
* is required for 64-bit registry access. For other systems fall
|
||||||
|
* back to RegDeleteKey(). */
|
||||||
|
did_load = TRUE;
|
||||||
|
advapi_lib = LoadLibrary("ADVAPI32.DLL");
|
||||||
|
if (advapi_lib != NULL)
|
||||||
|
delete_key_ex = (LONG (WINAPI *)(HKEY, LPCTSTR, REGSAM, DWORD))GetProcAddress(advapi_lib, "RegDeleteKeyExA");
|
||||||
|
}
|
||||||
|
if (delete_key_ex != NULL) {
|
||||||
|
return (*delete_key_ex)(hRootKey, key, KEY_WOW64_64KEY, 0);
|
||||||
|
}
|
||||||
|
return RegDeleteKey(hRootKey, key);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the popup menu entry exists and what gvim it refers to.
|
* Check if the popup menu entry exists and what gvim it refers to.
|
||||||
* Returns non-zero when it's found.
|
* Returns non-zero when it's found.
|
||||||
@ -89,14 +113,11 @@ remove_popup(void)
|
|||||||
int fail = 0;
|
int fail = 0;
|
||||||
HKEY kh;
|
HKEY kh;
|
||||||
|
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0,
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0,
|
||||||
KEY_WOW64_64KEY | KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS)
|
KEY_WOW64_64KEY | KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS)
|
||||||
@ -107,11 +128,9 @@ remove_popup(void)
|
|||||||
++fail;
|
++fail;
|
||||||
RegCloseKey(kh);
|
RegCloseKey(kh);
|
||||||
}
|
}
|
||||||
if (RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim",
|
if (reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim",
|
if (reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Vim") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
|
|
||||||
if (fail == 6)
|
if (fail == 6)
|
||||||
@ -127,26 +146,19 @@ remove_openwith(void)
|
|||||||
{
|
{
|
||||||
int fail = 0;
|
int fail = 0;
|
||||||
|
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, ".vim\\OpenWithList\\gvim.exe",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, ".vim\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe",
|
if (reg_delete_key(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
|
||||||
KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
|
|
||||||
++fail;
|
++fail;
|
||||||
|
|
||||||
if (fail == 7)
|
if (fail == 7)
|
||||||
@ -302,8 +314,7 @@ win95(void)
|
|||||||
delete_uninstall_key(void)
|
delete_uninstall_key(void)
|
||||||
{
|
{
|
||||||
#ifdef WIN3264
|
#ifdef WIN3264
|
||||||
RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
|
reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT);
|
||||||
KEY_WOW64_64KEY, 0);
|
|
||||||
#else
|
#else
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
char buf[BUFSIZE];
|
char buf[BUFSIZE];
|
||||||
|
|||||||
Reference in New Issue
Block a user