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

Raspunde prin e-mail lui