[patch] MS-Windows uninstaller fail to run on 32 bit systems

868 views
Skip to first unread message

Guopeng Wen

unread,
Aug 1, 2010, 11:42:36 PM8/1/10
to vim...@vim.org
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.

Regards!

--
Guopeng

reg-delete.patch

Guopeng Wen

unread,
Aug 2, 2010, 11:30:30 AM8/2/10
to vim...@vim.org

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

Bram Moolenaar

unread,
Aug 2, 2010, 4:10:13 PM8/2/10
to Guopeng Wen, vim...@vim.org

Guopeng Wen wrote:

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 ///

Bram Moolenaar

unread,
Aug 2, 2010, 5:12:44 PM8/2/10
to Bram Moolenaar, Guopeng Wen, vim...@vim.org

I wrote:

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!".

Guopeng Wen

unread,
Aug 2, 2010, 8:59:32 PM8/2/10
to vim...@vim.org

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

Stacy Casebeer

unread,
Mar 29, 2012, 6:48:38 PM3/29/12
to vim...@vim.org

>
> 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)
>

>

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


Reply all
Reply to author
Forward
0 new messages