On Tue, Aug 3, 2010 at 5:12 AM, Bram Moolenaar <b...@moolenaar.net> wrote: > > I wrote: > >> Guopeng Wen wrote: >> >> > I found the 7.3d NSIS installer I built cannot uninstall Vim on >> > Windows XP SP3. When I replicate the uninstallation process >> > manually, the following error was reported when launch >> > "uninstal.exe": >> > >> > 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. >> >> 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(). > > 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).
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 -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php