PDA

View Full Version : Deployed assemblies are not deleted after uninstall



Kovalenko
07-15-2008, 03:47 AM
Hello,

I have a Basic MSI project (IS 2009 SP1) that deploys .NET assemblies. Until recently uninstallation handled correctly deleting of deployed assemblies. But now they are left in target directory and I need to delete them manually. There is no error message or indication of that is something went wrong during uninstallation. What can the problem?

Kovalenko
07-15-2008, 04:26 AM
The log file that is generated during uninstallation shows:


MSI (s) (B4:DC) [11:58:27:599]: Feature: QEF; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles1; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles2; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles3; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles4; Installed: Local; Request: Absent; Action: Absent
MSI (s) (B4:DC) [11:58:27:599]: Component: AllOtherFiles5; Installed: Local; Request: Absent; Action: Absent
...

Such status is log for every installed component. Does anybody have a clue why it is so?

Lewis99
07-15-2008, 05:05 AM
I'm having the same problem, although I have duplication of assemblies between features and it is only those dll's that are not deleted. I am installing all assemblies into the same directory and using 'never overwrite' yes. How can I get around this problem?

Kovalenko
07-15-2008, 05:25 AM
I have a vague assumption that it is due to upgrade and installation of SP. What version of IS do you use?

Lewis99
07-15-2008, 06:49 AM
I'm using Installshield 2009 Premier
Version 15
Service Pack 1.

Is that what you are using?

Kovalenko
07-15-2008, 06:52 AM
Yes.

I am trying to figure out what is the problem. I will post back a bit later about the results. Probably you encounter the same problem.

Lewis99
07-15-2008, 08:43 AM
OK thank you Kovalenko. I am really very stuck with the problem so any information you find will be very helpful. Here are the results of my investigations:

If I look in the MSI Log I see the following:

MSI (s) (FC:A0) [13:06:43:752]: Executing op: ComponentUnregister(ComponentId={3A0966C5-55E6-A035-AB25-4C005178B2D6},,BinaryType=0,PreviouslyPinned=1)
1: {9AC43159-48AF-4171-BB27-A91F0000CEBF} 2: {3A0966C5-55E6-A035-AB25-4C005178B2D6}

These correspond with all of the dll's that don't get deleted. I am using the Shared = Yes property because I want the registry to keep track of the number of times the same dll is installed from different features. i.e. Feature A and Feature B may both contain the same dll, but the installation copies them all into one main directory. I am also using dynamic file allocation to assign the dlls to each feature.

I can see that all of my Shared Assemblies are being deleted from the registry, yet PreviouslyPinned=1 remains and so do all the duplicated dlls in my installation directory.

I've tried running it on several, clean machines. However, my installer still fails to delete a subset of the files.

Lewis99
07-15-2008, 08:50 AM
PS: I also have the same 'Absent' values that you had in your logfile:

MSI (s) (FC:A0) [13:06:42:127]: Component: AllOtherFiles; Installed: Local; Request: Absent; Action: Absent
MSI (s) (FC:A0) [13:06:42:127]: Component: AllOtherFiles1; Installed: Local; Request: Absent; Action: Absent
MSI (s) (FC:A0) [13:06:42:127]: Component: AllOtherFiles2; Installed: Local; Request: Absent; Action: Absent
MSI (s) (FC:A0) [13:06:42:127]: Component: _FAD7BC9773DE077A3CA18D5BB964FE5D; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _62D6A2DD9465AD5A65BEAABA29A6DA52; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _11ABF4932AD00801C80094D8EFFCFB3D; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _A6BBD9D898514E177DE950025FB62B8F; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _FB798DEEFA3D0E0FBC7CAF9DD4C25396; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _7E6A2199B6E22470D3C4650790D0CB79; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _CB155800C0E9F48874724AB38CD6AFAC; Installed: Local; Request: Absent; Action: Null
MSI (s) (FC:A0) [13:06:42:127]: Component: _0C82B1A4DF158DEC6D33A0AAC52977CC; Installed: Local; Request: Absent; Action: Null

Kovalenko
07-15-2008, 09:10 AM
Lewis,

For now I have now idea of what is happening during uninstall. The only thing that I came to until now is that if I create another directory under [INSTALLDIR] and move all output files from, let's say, [INSTALLDIR]/Bin (this is where these file cannot be deleted from) and use this newly created folder, everything works fine.

Nevertheless no solution till now.

PS Message like

Component: AllOtherFiles; Installed: Local; Request: Absent; Action: Absent

is valid as I understood, because I created a sample installation project that works correctly and it has the same entries.

Lewis99
07-15-2008, 09:15 AM
Thanks for the info. I will try using a secondary folder and see what happens. I just created the same project in IS2008 and everything worked fine. The main difference that I can see so far between the two logfiles is that IS2009 is marking the components with the PreviouslyPinned=1 flag.

Lewis99
07-15-2008, 09:33 AM
Having said that, it doesn't look like the Shared functionality works at all in IS2008 as no entries are being made in the registry for shared dlls even with Shared=Yes. If someone knows differently or can correct me, please let me know.

Kovalenko
07-15-2008, 11:46 AM
Finally I was able to solve my problem

The PreviouslyPinned=1 indicates that you likely have a share count in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs for the keyfile of those components.

You might just want to clean out this machine and test from scratch if this is a machine that's been tested or used extensively in the past.

Lewis99
07-16-2008, 04:42 AM
I have tried running the installer on a fresh machine but it still leaves files behind. I've checked the shared area of the registry and there are no entries for my application's dll's.

I am trying to package a .NET application by running a dependency check and creating folders for each feature. Some of the features share dll's. Eg. Feature A and Feature B may include xxx.dll. Therefore when the full feature set is installed (into one application directory) some dll's are being overwritten several times. At this point a count appears in the shared area of the registry. However, when I uninstall everything, the counts are deleted but PreviouslyPinned=1 is still set in the log file.

Am I taking the right approach for this? Also, is this how your installer works? e.g. Multiple features with duplicate dll's going into the same installation directory? If so, how did you overcome the problem?