cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
BrHartmann
Level 7

bug with multiple release flags and MSI chaining?

I'm calling this likely a bug because I'm seeing different behavior in my 32-bit basic MSI project vs. the complementary 64-bit basic MSI project.

In both cases I have 4 Product configs, and 2 sets of release flags:

US and INTL
A and B (names simplified for the post)

I have a chained .msi package in each project which should only be included for release flags "INTL,A".

I'm working with a new build machine where these chained packages have not been built yet, but I wanted to test out a release that shouldn't need them, where release flags are set as "US,A".

My 32-bit built successfully, but when trying to build the 64-bit project, I get a build error:

Could not stream the file {path to that chained msi} into the ISChainPackageData table.

I thought at first I was mistaken about how flags work, and that just having "A" in both the release and chained config would mean it should be included, despite the US vs. INTL flags not matching. However, since it behaves as I expected in the 32-bit project, I'm not sure what to make of this.

Does anyone know if this is a known bug, and if so, if there are plans to address it in 2012 SP1?

I have components that only need to be set to A vs. B, or US vs. INTL, so I'm hoping I don't have to work around this issue with additional redundant flags (ie. A_US, A_INTL, etc.).

As a side note, I tried the release flags in the release config, in the product configuration (as PC flags), and even duplicated in both, with same error when I build the 64-bit project.
Labels (1)
0 Kudos
2 Replies
MichaelU
Level 12 Flexeran
Level 12 Flexeran

When working correctly, an item is included in any of the following three cases:

  • the combined set of flags listed in the release and product configuration being built is empty
  • the set of flags listed on an item is empty
  • there is a non-empty intersection of the two above sets

So if there are cases where you want to include the item only when both A and US are defined (yet exclude it when A and INTL -- or B and US -- are defined), you will need an additional flag for that usage.
0 Kudos
BrHartmann
Level 7

Thanks for the overview. I'm not sure why my 32-bit project wasn't causing issues (and hence led me down a path of false reasoning), but it became clear later that it was in fact behaving the same way (keying off a non-empty intersection as you mentioned above).

I added an extra set of flags (i.e. A_US, A_INTL) specifically for the chained MSIs and that works fine.
0 Kudos