Entry Point Not Found:
The procedure entry point RegDeleteKeyExA could not be located
in the dynamic link library ADVAPI32.DLL.
It turns out RegDeleteKeyEx() is only available on 64 bit Windows,
according to MSDN:
http://msdn.microsoft.com/en-us/library/ms724847(VS.85).aspx
Minimum supported client:
Windows Vista, Windows XP Professional x64 Edition
That function call was introduced in changeset b204ac54bea4:
Fix: the MS-Windows uninstaller did not delete registry keys on
64 bit systems.
The simple patch (against changeset 7f578da7edb2) I attached defines
a macro REG_DELETE_KEY, which translates to RegDeleteKeyEx when
WIN3264 defined, and to RegDeleteKey otherwise.
I only tested the patch on Windows XP SP3, it works. I do not have
64-bit system to verify with, it should work in theory since the
code is the same after pre-processing when WIN3264 is defined.
Regards!
--
Guopeng
I should also mention that I built Vim with MinGW, WINVER was set to
0x0500. uninstal.c was built fine but the executable won't run on
32-bit Windows XP. The "RegDeleteKeyExA entry point not found in
ADVAPI32.DLL" error will be reported as mentioned above, and
"uninstal.exe" would abort without doing anything.
Regards!
--
Guopeng
It does work on my Windows XP system. Apparently it's hard to predict
if RegDeleteKeyEx() is going to work. This would require using
LoadLibrary() and GetProcAddress().
--
The fastest way to get an engineer to solve a problem is to declare that the
problem is unsolvable. No engineer can walk away from an unsolvable problem
until it's solved.
(Scott Adams - The Dilbert principle)
/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
I have implemented this now. It appears to work OK (tested on Windows
XP and Windows 7 64 bit).
Let me know if there are still build problems and uninstall problems (if
you build it yourself).
--
An alien life briefly visits earth. Just before departing it leaves a
message in the dust on the back of a white van. The world is shocked
and wants to know what it means. After months of studies the worlds
best linguistic scientists are able to decipher the message: "Wash me!".
I built and tested the latest mercurial version (7d1044b27eb5), now
the uninstaller works correctly, thanks! BTW, I built with MinGW,
with WINVER set to 0x0500.
I saw the WIN3264 macro and thought there might be a 64-bit special
build using that macro. Apparently I made the wrong assumption and
my patch won't work for 64-bit systems. Late binding is the correct
way to go.
I guess the reason why RegDeleteKeyEx() works on some systems but
not others is certain Microsoft product (most likely MS Visual
Studio 2010) upgraded <windows>/system32/advapi32.dll silently. My
system is Windows XP professional, with every possible patches
applied, and the version of the said DLL is:
Advanced Windows 32 Base API
File Version: 5.1.2600.5755 (xpsp_sp3_gdr.090206-1234)
Probably off topic. If I can make silent mode of the NSIS installer
works reasonably well (so we can install/uninstall from command line
without any mouse click), is there any concern if I migrate
functionality of install.c/uninstal.c into NSIS script? In this
way, we may avoid the mess we've just encountered in the future, the
installer (or the script) should take care of version compatibility
issue.
Regards!
--
Guopeng
>
That is not the reason. I have the same version of the DLL and I still get the
error.
Where is this patch that is "attached"?
SLC