开发者

How do Windows Installer instance transforms interact with upgrades?

开发者 https://www.devze.com 2023-02-15 03:22 出处:网络
I\'ve created an installation package (via WIX) that takes advantage of instance transforms to allow itself to be installed multiple times on one machine. Without giving it a lot of thought, I also ad

I've created an installation package (via WIX) that takes advantage of instance transforms to allow itself to be installed multiple times on one machine. Without giving it a lot of thought, I also added support for major upgrades (as I had done many times previously).

Today, a new version of the product was installed for the first time, and the behavior was not quite what I expected: Even though the installation was targeted at a new instance, it appears that all the other instances (all at an older version) were uninstalled.

In hindsight, this was not particularly surprising because all instances share the same upgrade code. According to the documentation for the FindRelatedProducts action, that and the version are the only criteria for determining what products should be targeted for removal.

How can I author this installation package such that when a new version is installed, only the targeted instance is upgraded, and other instances are left alone?

I suspect the answer may be that I should remove the 'major upgrade' feature altogether, but I've seen several examples of multiple-instance installs that use it, so I'm not sure. Also, it occurs to me that I'm probably not handling the product code correctly because it should be updated with the version number, but the instance transforms use a fixed product code. Somehow开发者_JAVA技巧 I don't think that is the problem here, but I thought I should mention it just in case.


I once wrote a bootstrapper using InstallScript to support a similar story. This was before InstallShield included this functionality and was based on my work that I shared with them.

Basically my code did a lot of work reflecting the instance transforms out of the MSI's Storage and then querying the MSI API to understand which instances were already installed and whether the current MSI represented a Maintenance UI ( same ProductCode and same PackageCode ) or a Major Upgrade Upgrade ( Different ProductCode ) or a Minor Upgrade ( same ProductCode different PackageCode).

You can read about it in more detail at:

Multiple Instance MSI's and InstallShield 12

Here's an explanation of how it works in IS2009+ with screen shots of the bootstrapper UI.

InstallShield 2009 Beta Part I ( Multiple Instances )

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号