Discussion:
[WiX-users] Issue with RemoveFolder and Error 2911 Config.msi
Sascha Sertel
11 years ago
Permalink
I ran into a weird issue that I can't seem to figure out, hopefully someone
has an idea.

My issue happens only when doing a minor upgrade from an older version to a
newer version of my product. The failure lines from the log look like this:

MSI (s) (1C:3C) [23:17:21:084]: Note: 1: 2228 2: 3: Error 4: SELECT
`Message` FROM `Error` WHERE `Error` = 2911
DEBUG: Error 2911: Could not remove the folder C:\Config.Msi\.
MSI (s) (1C:3C) [23:17:21:084]: Note: 1: 2318 2:
The installer has encountered an unexpected error installing this package.
This may indicate a problem with this package. The error code is 2911. The
arguments are: C:\Config.Msi\, ,

There was a change to the wxs between those two versions, and if I undo the
change then upgrade works fine again. However, I cannot figure out how to
get it so the upgrade works fine with the change. Fresh install works fine
with the change, it's only upgrade that fails.

The change is pretty trivial: I added a Directory entry to the list of
directories, and a corresponding Component with RemoveFolder entry. There
was another directory on the same level already for which I did the exact
same thing, so it's basically just copy and paste and changing the
directory identifier. Note that the directory I added is actually created
by the app already (also in the lower version), I only added it so my
custom action can blow the directory away during uninstall.

The closest match to my issue that I could find is this one:
http://stackoverflow.com/questions/21242963/wix-installer-uninstalls-but-not-installs-if-previous-version-is-installed

I also have a custom action but it is only run at uninstall. The log
clearly shows that the action was not run because its condition evaluated
to false.

Any ideas what might be going on here?

// Sascha
Carter Young
11 years ago
Permalink
Message 1:
Error 2228 = Database: [2]. Unknown table '[3]' in SQL query: [4].
Error 2911 = Could not remove the folder [2].

Message 2:
Error 2318 = File does not exist: [2].

Did you happen to add a Database Table in your update. I can't tell
if Message 1 is coming from the Installer Tables or from your
Application.

Config.msi as a folder cannot be removed as a whole as it contains
copies of MSI's installed on your system. You must remove the
individual msi's not the folder. This usually indicates that the
uninstall/upgrade process cannot find the name of the msi to uninstall
or upgrade.

And Save the following link to your Programmer's Toolbox:
http://msdn.microsoft.com/en-us/library/aa372835(v=vs.85).aspx
...
Sascha Sertel
11 years ago
Permalink
No, there is no database involved in the installer. I get that the error
isn't really about the Config.msi directory, but I don't know how to solve
this.

As I said, my changes that caused this failure are trivial, a new directory
and matching RemoveFolder entry, neither of which should cause this?

// Sascha
...
John Cooper
11 years ago
Permalink
The database being referred to is probably the MSI itself. Problems with RemoveFolder usually occur when the property is not defined soon enough. It must be defined before the RemoveFolders standard action runs.

What does your authoring look like? Are you using a property?

--
John Merryweather Cooper
Senior Software Engineer | Enterprise Service Applications | Continuing Development
Jack Henry & Associates, Inc.® | Lenexa, KS  66214 | Ext: 431050 |***@jackhenry.com



-----Original Message-----
From: Sascha Sertel [mailto:***@gmail.com]
Sent: Friday, September 5, 2014 1:31 PM
To: General discussion about the WiX toolset.
Subject: Re: [WiX-users] Issue with RemoveFolder and Error 2911 Config.msi

No, there is no database involved in the installer. I get that the error isn't really about the Config.msi directory, but I don't know how to solve this.

As I said, my changes that caused this failure are trivial, a new directory and matching RemoveFolder entry, neither of which should cause this?

// Sascha
...
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
WiX-users mailing list
WiX-***@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users
NOTICE: This electronic mail message and any files transmitted with it are intended
exclusively for the individual or entity to which it is addressed. The message,
together with any attachment, may contain confidential and/or privileged information.
Any unauthorized review, use, printing, saving, copying, disclosure or distribution
is strictly prohibited. If you have received this message in error, please
immediately advise the sender by reply email and delete all copies.
Sascha Sertel
11 years ago
Permalink
As I said it's really simple, here an excerpt from my directory definitions
(all within the same Fragment):
1 <Directory Id="LocalAppDataFolder" Name="LocalAppData">
2 <Directory Id="APPDATAFOLDER" Name="$(var.ProductName)" />
3 <Directory Id="CONFIGFOLDER" Name="$(var.ConfigName)" />
4 </Directory>

In the old installer lines 1, 2, and 4 existed already, in the new version
I added line 3. The WiX properties are defined at the top of the file right
below each other.

Similarly, I have this section to satisfy ICE64:

1 <Fragment>
2 <DirectoryRef Id="APPDATAFOLDER">
3 <Component Id="CleanupAppDataFolder" Guid="*">
4 <RegistryValue Root="HKCU"
Key="Software\$(var.Manufacturer)\$(var.ProductName)" Name="AppDataPath"
Type="string" Value="[APPDATAFOLDER]" KeyPath="yes" />
5 <RemoveFolder Id="APPDATAFOLDER" On="uninstall"/>
6 </Component>
7 </DirectoryRef>
8 <DirectoryRef Id="CONFIGFOLDER">
9 <Component Id="CleanupConfigFolder" Guid="*">
A <RegistryValue Root="HKCU"
Key="Software\$(var.Manufacturer)\$(var.ProductName)" Name="ConfigPath"
Type="string" Value="[CONFIGFOLDER]" KeyPath="yes" />
B <RemoveFolder Id="CONFIGFOLDER" On="uninstall"/>
C </Component>
D </DirectoryRef>
E </Fragment>

Like before, lines 1-7 and E were already in the old installer, and I added
lines 8-D for the new directory. If I take the new entries out the upgrade
works without problems, with these new lines the upgrade fails with that
Config.msi error.

After doing some more testing I noticed that it looks like ANY change to
the directories compared to the original installer causes this failure. As
a test I removed the directory and RemoveFolder element that was in the old
installer, and I get the exact same failure. Is this perhaps a version
issue? Can I not add/remove directories in a minor upgrade?

Also, I forgot to mention before, this failure doesn't actually make the
installer fail, instead the installer succeeds and ARP shows the new
version as well, but in fact it didn't install and none of the binaries
were replaced due to the error that caused a rollback and made it not touch
anything. To the user it's not immediately clear that it didn't actually
update anything.

// Sascha
...
John Cooper
11 years ago
Permalink
Ok, so CONFIGFOLDER is not going to exist on the old installer. What is you upgrade scheduling? To make this work, you probably need ***@Schdule=afterInstallInitialize or afterInstallValidate. In an overlapped upgrade, it's going to attempt to remove a non-existent CONFIGFOLDER.
--
John Merryweather Cooper
Senior Software Engineer | Enterprise Service Applications | Continuing Development
Jack Henry & Associates, Inc.® | Lenexa, KS  66214 | Ext: 431050 |***@jackhenry.com



-----Original Message-----
From: Sascha Sertel [mailto:***@gmail.com]
Sent: Friday, September 5, 2014 1:59 PM
To: General discussion about the WiX toolset.
Subject: Re: [WiX-users] Issue with RemoveFolder and Error 2911 Config.msi

As I said it's really simple, here an excerpt from my directory definitions (all within the same Fragment):
1 <Directory Id="LocalAppDataFolder" Name="LocalAppData">
2 <Directory Id="APPDATAFOLDER" Name="$(var.ProductName)" />
3 <Directory Id="CONFIGFOLDER" Name="$(var.ConfigName)" />
4 </Directory>

In the old installer lines 1, 2, and 4 existed already, in the new version I added line 3. The WiX properties are defined at the top of the file right below each other.

Similarly, I have this section to satisfy ICE64:

1 <Fragment>
2 <DirectoryRef Id="APPDATAFOLDER">
3 <Component Id="CleanupAppDataFolder" Guid="*">
4 <RegistryValue Root="HKCU"
Key="Software\$(var.Manufacturer)\$(var.ProductName)" Name="AppDataPath"
Type="string" Value="[APPDATAFOLDER]" KeyPath="yes" />
5 <RemoveFolder Id="APPDATAFOLDER" On="uninstall"/>
6 </Component>
7 </DirectoryRef>
8 <DirectoryRef Id="CONFIGFOLDER">
9 <Component Id="CleanupConfigFolder" Guid="*">
A <RegistryValue Root="HKCU"
Key="Software\$(var.Manufacturer)\$(var.ProductName)" Name="ConfigPath"
Type="string" Value="[CONFIGFOLDER]" KeyPath="yes" />
B <RemoveFolder Id="CONFIGFOLDER" On="uninstall"/>
C </Component>
D </DirectoryRef>
E </Fragment>

Like before, lines 1-7 and E were already in the old installer, and I added lines 8-D for the new directory. If I take the new entries out the upgrade works without problems, with these new lines the upgrade fails with that Config.msi error.

After doing some more testing I noticed that it looks like ANY change to the directories compared to the original installer causes this failure. As a test I removed the directory and RemoveFolder element that was in the old installer, and I get the exact same failure. Is this perhaps a version issue? Can I not add/remove directories in a minor upgrade?

Also, I forgot to mention before, this failure doesn't actually make the installer fail, instead the installer succeeds and ARP shows the new version as well, but in fact it didn't install and none of the binaries were replaced due to the error that caused a rollback and made it not touch anything. To the user it's not immediately clear that it didn't actually update anything.

// Sascha
...
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
WiX-users mailing list
WiX-***@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users
NOTICE: This electronic mail message and any files transmitted with it are intended
exclusively for the individual or entity to which it is addressed. The message,
together with any attachment, may contain confidential and/or privileged information.
Any unauthorized review, use, printing, saving, copying, disclosure or distribution
is strictly prohibited. If you have received this message in error, please
immediately advise the sender by reply email and de
Sascha Sertel
11 years ago
Permalink
I thought when it uninstalls the old version it does so by running the
cached MSI for THAT version, which also doesn't have CONFIGFOLDER in it?

I've made other changes to the installer before such as adding new files
etc. and I've never had issues like this.

// Sascha
...
Sascha Sertel
11 years ago
Permalink
I figured it out, it was never about Config.msi in the first place. When I
looked at the log file for a successful upgrade I realized it has the same
Config.msi error message in it, so that's always there and probably also
the reason why the installer isn't actually failing, I guess MSI just
ignores that one.

The REAL issue was that I had done (and then forgotten about) something
that I didn't realize was a big no-no: I removed a file (and its component)
from a feature in a minor upgrade. After going through the log file line by
line I finally stumbled over this:

MSI (s) (28:5C) [15:27:36:652]: SELMGR: ComponentId
'{2D7F4762-05A3-5CCE-A909-C3D03507F96A}' is registered to feature
'ClientComponentsFeature', but is not present in the Component table.
Removal of components from a feature is not supported!
MSI (s) (28:5C) [15:27:36:652]: SELMGR: Removal of a component from a
feature is not supported

And that's the reason why none of the files get updated. So now I only need
to figure out which is the lesser evil, putting the obsolete file back (as
a 0 byte file) or changing the ProductCode and turning this into a major
upgrade.

Thanks for the help!

// Sascha
...
Rob Mensching
11 years ago
Permalink
You may find this useful: http://robmensching.com/blog/posts/2007/1/4/doing-a-small-update-or-minor-upgrade-in-msi-use/

_____________________________________________________________
Short replies here. Complete answers over there: http://www.firegiant.com/


-----Original Message-----
From: Sascha Sertel [mailto:***@gmail.com]
Sent: Friday, September 5, 2014 4:22 PM
To: General discussion about the WiX toolset.
Subject: Re: [WiX-users] Issue with RemoveFolder and Error 2911 Config.msi

I figured it out, it was never about Config.msi in the first place. When I looked at the log file for a successful upgrade I realized it has the same Config.msi error message in it, so that's always there and probably also the reason why the installer isn't actually failing, I guess MSI just ignores that one.

The REAL issue was that I had done (and then forgotten about) something that I didn't realize was a big no-no: I removed a file (and its component) from a feature in a minor upgrade. After going through the log file line by line I finally stumbled over this:

MSI (s) (28:5C) [15:27:36:652]: SELMGR: ComponentId '{2D7F4762-05A3-5CCE-A909-C3D03507F96A}' is registered to feature 'ClientComponentsFeature', but is not present in the Component table.
Removal of components from a feature is not supported!
MSI (s) (28:5C) [15:27:36:652]: SELMGR: Removal of a component from a feature is not supported

And that's the reason why none of the files get updated. So now I only need to figure out which is the lesser evil, putting the obsolete file back (as a 0 byte file) or changing the ProductCode and turning this into a major upgrade.

Thanks for the help!

// Sascha
...
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
WiX-users mailing list
WiX-***@lists.sourceforge.net
https://lists.sourcef

Loading...