On Tue, Aug 3, 2010 at 5:12 AM, Bram Moolenaar <[email protected]> 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