cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
MBLance
Level 4

Cannot Overwrite Files

I am using InstallShield 2010. I have a Basic MSI project with one feature and lots of components. All the files in all the components have the "Always Overwrite" property. However, when I try to reinstall over an existing installation, the files do not get overwritten.

I have played with adding a command-line option of REINSTALLMODE=vomusa (the default is vomus), but that did not make a difference.

I do nightly builds, so the contents of the installer for this product potentially change often: There could be new files, existing files could change, or files might be removed.

I have read a little about Upgrades, and what I am doing should classify as a minor upgrade....

Any help appreciated!
Labels (1)
0 Kudos
(10) Replies
Reureu
Level 10

Just a few points that might help you:

  • I would not use the "always overwrite" flag. I would rather make sure that the file version attribute of every assembly or binary is set properly and incremented every time something has been changed in the corresponding source code. This would then allow you take advantage of the versioning rules of Windows Installer.
    The only situation where I had to use this "always overwrite" flag was for 3rd party assemblies that did not follow strict versioning rules.

  • As for the REINSTALLMODE property, it can be used in some situations indeed, but you cannot specify "a" and "o" at the same time. If you want to force all files, all registry entries and all shortcuts to get reinstalled, you need to specify "vamus". You should also specify which features are to be reinstalled by using the REINSTALL property (in your case REINSTALL=ALL).
    Also the setup executable might well set the REINSTALLMODE property for you.

  • If you want to do a minor upgrade, don't forget to increment the product version of your MSI package, and remember it only has 3 fields (e.g. v 1.2.3).

  • Allowing to perform a minor upgrade of your product means your MSI package must follow some rules. Use the Upgrade Validation Wizard to make sure your MSI package does not infringe these rules.

  • Avoid using dynamic file linking. That "feature" can make your minor upgrade fail, as if a dynamically linked file gets removed from your build (which infringe minor upgrade rules), you won't necessarily notice it as IS will still be able to build your MSI package.

  • Alternatively, try to create an MSI logfile of your minor upgrade. It will show you why each file does not get updated.
0 Kudos
Rouslan
Level 4

Also note that only files with filled version field can be overwritten.

Just set version for all files like "1.0.0.0"
0 Kudos
MBLance
Level 4

Reureu, Rouslan - thank you both for the helpful information.

Now to decide what to do. We do not follow *any* version rules, and I am not sure how that could be implemented in my environment (multiple developers modifying many files in many projects all the time).

The good thing is in this particular case, I control all the source and input for the product, and so can implement a version scheme.

Thanks again for the help.
0 Kudos
MBLance
Level 4

...is one of the .exe files in the existing installation has file version 10.9.11.0, but the version of the file I am trying to overwrite it with (in the installer) is 10.9.22.0.

Why did that file not get overwritten when the "Always Overwrite" property was set, and REINSTALL MODE was "vomus" with REINSTALL=ALL?

It turns out I was being strict with file versions on at least that file....
0 Kudos
Rouslan
Level 4

MBLance wrote:
...is one of the .exe files in the existing installation has file version 10.9.11.0, but the version of the file I am trying to overwrite it with (in the installer) is 10.9.22.0.

It could be a bug of Windows Installer. WI sometimes ignore two last positions of version.
Try to change it to 10.922.0.0
0 Kudos
MBLance
Level 4

Rouslan wrote:
It could be a bug of Windows Installer. WI sometimes ignore two last positions of version.
Try to change it to 10.922.0.0


Good idea, but I started trying with version 10.10.0.0, and it would not update that either. I manually uninstalled, then installed 10.6.0.0, and it still would not update when installing 10.9 or 10.10.
0 Kudos
joshstechnij
Level 10 Flexeran
Level 10 Flexeran

Note that if no files seem to be updated with a small update or minor upgrade, this could be due to component rules being broken (possibly through the use of dynamic file links as mentioned). Logging the installation in such a case will result in SELMGR information in the log indicating feature/component mappings have been broken due to components being removed (which will also result in your features set to an Install state of Advertised in the log). You can also pass MSIENFORCEUPGRADECOMPONENTRULES=1 on the command line to trigger a runtime error if component rules have been broken.
0 Kudos
Reureu
Level 10

I don't think it is a bug in Windows Installer.
Have you tried to validate your minor upgrade with the Upgrade Validation Wizard? I would definitely recommend you to give it a go:

Build->Validate->Upgrade Validation Wizard

It should show you why your upgrade is not working.
0 Kudos
MBLance
Level 4

Those look like more trouble than they are worth!

I can try the validation tomorrow.

In general, though, this situation is somewhat confusing. I only have a handful of files in the installer, and they change with some frequency. The version numbers of some of them change with each build (some of the dll version numbers are not strictly managed). Installation of an exe with version "x.y" does not get overwritten by an installer carrying the updated exe with version "x + n.y + m" That seems like a bug.
0 Kudos
Reureu
Level 10

Go ahead with the validation. You might be surprised with the results.
If that doesn't help, try the minor upgrade with a dummy project that installs only one versioned file (either EXE or DLL).
If a minor upgrade of this dummy product doesn't work, post the Installshield Project and all the required files in this thread.
0 Kudos