diff --git a/src/dosinst.h b/src/dosinst.h
index 444af45..b33426a 100644
--- a/src/dosinst.h
+++ b/src/dosinst.h
@@ -89,7 +89,6 @@
  */
 # ifndef KEY_WOW64_64KEY
 #  define KEY_WOW64_64KEY 0x0100
-#  define RegDeleteKeyEx(a, b, c, d) RegDeleteKey(a, b)
 # endif
 
 #define VIM_STARTMENU "Programs\\Vim " VIM_VERSION_SHORT
diff --git a/src/uninstal.c b/src/uninstal.c
index 13138aa..99cdc67 100644
--- a/src/uninstal.c
+++ b/src/uninstal.c
@@ -33,6 +33,30 @@
 }
 
 #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.
  * Returns non-zero when it's found.
@@ -89,14 +113,11 @@
     int		fail = 0;
     HKEY	kh;
 
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim") != ERROR_SUCCESS)
 	++fail;
     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0,
 		      KEY_WOW64_64KEY | KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS)
@@ -107,11 +128,9 @@
 	    ++fail;
 	RegCloseKey(kh);
     }
-    if (RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Vim") != ERROR_SUCCESS)
 	++fail;
 
     if (fail == 6)
@@ -127,26 +146,19 @@
 {
     int		fail = 0;
 
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "Applications\\gvim.exe",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "Applications\\gvim.exe") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, ".vim\\OpenWithList\\gvim.exe",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, ".vim\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
 	++fail;
-    if (RegDeleteKeyEx(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe",
-		KEY_WOW64_64KEY, 0) != ERROR_SUCCESS)
+    if (reg_delete_key(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
 	++fail;
 
     if (fail == 7)
@@ -302,8 +314,7 @@
 delete_uninstall_key(void)
 {
 #ifdef WIN3264
-    RegDeleteKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
-	    KEY_WOW64_64KEY, 0);
+    reg_delete_key(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT);
 #else
     FILE	*fd;
     char	buf[BUFSIZE];
