Groups | Blog | Home
all groups > visual studio .net setup > february 2007 >

visual studio .net setup : Uninstall Custom Action not getting called.



TheClothCat
2/12/2007 4:00:01 AM
Hi everyone,

I want to run an exe (Uninst.exe) when my software is uninstalled. I have
added the file to the Application Folder in the File System Editor and added
it as a Custom Action under the Uninstall phase in the Custom Action Editor,
but it does not get executed when my software is uninstalled, either from
within Visual Studio on my development PC or on a different PC when installed
from a CD.

I have put debug code in Uninst.exe so I am sure it is not getting executed.
It is a very simple console app written in C++ for Win32. I got it to work
once on the different PC but it would not do it again.

Stranger still, I changed the Permanent Property of Uninst.exe to be True
and the installer correctly left it in the app's directory. However, after I
changed it back to False it still leaves it there!

It is almost as if Setup uses a cache and the cache is not working properly.
I'm using Visual Studio 2003 with SP1.

I'm baffled. Any ideas would be welcome.

Thank you.
Phil Wilson
2/12/2007 1:02:34 PM
Your setup&deployment project has a ProductCode property. Try the uninstall
like this:

msiexec /x {the product code guid} /l*vx somefile.log

to produce a log of the uninstall. There will be something about whether
there was an attempt to call it. Note that Win32 exes have dependencies that
you might not have installed, like the C runtime support, so it will try to
call it but fail.
--
Phil Wilson
[Microsoft MVP Windows Installer]

[quoted text, click to view]

Phil Wilson
2/12/2007 1:08:36 PM
p.s. Once you mark a file as permanent, it really does mean permanent! It's
intended for files that must remain on the system, not just until you change
Permanent to false in your setup.
--
Phil Wilson
[Microsoft MVP Windows Installer]

[quoted text, click to view]

TheClothCat
2/13/2007 2:31:01 AM
Thanks for the reply. Unfortunately your suggestion seems to have had a
distastrous effect. When I ran msiexec as suggested it hung with a DOS window
open called something like MSI40 - I can't remember the number.

Now I cannot install or uninstall my software from within Visual Studio or
outside it, even if I do a full rebuild.

Any suggestions?

[quoted text, click to view]
TheClothCat
2/13/2007 8:15:01 AM
Phil,

Further to my last post, I have now got my setup and deployment project
working again. That still leaves my original problem though. Is it likely to
be one of the msiexec command line parameters that caused your suggestion to
fail?

[quoted text, click to view]
Phil Wilson
2/14/2007 7:35:29 AM
It's not likely, no. People do uninstalls with logging all the time. Your
system might have an issue. Is your Win32 program a console app? If it is,
that's where the command prompt window is coming from. It's showing that
and then your app can't run.
My vote is still dependencies. If you haven't got the c run time available
then your program won't load. Visual Studio 2005 C++ apps require sxs 8.0
CRT or statically linked. That's why setup projects have a prerequisites
option to install the redist.
--
Phil Wilson
[Microsoft MVP-Windows Installer]
Definitive Guide to Windows Installer
http://apress.com/book/bookDisplay.html?bID=280

[quoted text, click to view]

TheClothCat
2/15/2007 7:30:04 AM
Phil,

Thanks for the reply.

My Win32 program is a console app which explains the command prompt window.
When I run the console app as custom action after the Install or Commit
phases of installation it works perfectly.

This must mean there is something different about the Uninstall phase. And
before you ask the question, the console app does not depend on anything else
that Uninstall could remove before running the console app. The console app
runs perfectly when started manually from a command prompt window.

This is why I am suspicious that something is wrong with custom actions in
Uninstall in VStudio 2003 SP1.

Do you known if anyone has done this successfully i.e. run a console app as
a custom action after the Uninstall phase in VStudio 2003 SP1?


[quoted text, click to view]
Phil Wilson
2/15/2007 12:11:14 PM
You'll have to be suspicious of everything, including your debugging code. I
ran this program as an uninstall custom action fine, VS 2003, bare bones
program with an include of windows.h for MessageBox.

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
MessageBox (NULL, TEXT("MSG"), TEXT ("SOMETHING"), MB_OK);
return 0;
}

--
Phil Wilson
[Microsoft MVP Windows Installer]
[quoted text, click to view]

TheClothCat
2/19/2007 3:33:53 AM
Hi Phil,

Problem solved. I created a new console project and put your bare bones code
in it and it worked fine as an uninstall custom action. So next I created
another new console project and copied my code from my problematic program
into the new one. Again it works fine!

I don't know what the actual problem was and I don't really want to spend
the time tracking it down. The only things I can think of are that there was
some weird corruption in the one of the project files or maybe some project
setting.

Many thanks for your suggestions.

[quoted text, click to view]
H
3/15/2007 12:00:00 AM
I have a similar problem with VS2005. I have an installer class DLL which will
run a DOS batch file fine on Commit. When I use it to create an Uninstall
custom action, the DOS batch file is not run.

The reason I have to run DOS batch files is because I am installing two COM
libraries. Neither of these get registered with a code base when I use the
vsd*COM flags on the Project Output or explicit dlls. So I have to run a
manual regasm as a workaround. As I said this works fine on Commit, however
the unregister batch file never gets run on UnInstall.

Regards

H


[quoted text, click to view]
AddThis Social Bookmark Button