I have created a lot of minor upgrades before, but recently I had a problem that I could not figure out. Remember that in a Minor Upgrade, the Product Version and Package Code both change.
The Minor Upgrade I was creating installed a new component and file into a new folder. All other components in the original install were still there, and the Component Codes were the same. However, no matter what I did, the new component was not being installed.
I read some posts in the InstallShield community forum and found one that was particularly interesting. It said that you could force the installation of a new component in a Minor Upgrade by setting the ADDLOCAL property. However, I could not find any detailed information on how to do this. I eventually abandoned that idea in favor of something else.
I read on MSDN that in a Minor Upgrade, you can create a new child feature of an existing feature and require that it be installed. You do this by setting the msidbFeatureAttributesFollowParent and msidbFeatureAttributesUIDisallowAbsent bits of the child feature’s attribute in the Feature table. So I created a new child feature of the existing feature, associated the new component with that feature, and set those bits in the Feature Table. That worked.
Hopefully, this will help someone in the future.
The article on MSDN is about Product Codes, but also has information pertaining to Minor Upgrdes. Here’s the link:
Update 07/27/2010: This change only worked for the first two hours I was testing it. I actually found out that if you create a new child feature and add a new component to that, the new component will not be installed. I’m not sure why it worked at first, but I had to come up with a new solution. More on that later.