0
votes

I have a number of localized MSI packages. Let's say what is localized is a start menu entry, using !(loc.StartAppDescription) .

It seems reasonable that this is done using WiX in the MSI. So I've done that, and I've generated a number of transforms based on a baseline en-US version, and I've embedded this into a final MSI, MyCoolApp-1.2.123.0.msi .

The transform can be used with a MsiProperty element with Name="TRANSFORM" Value=":it-IT" in the MsiPackage.

Each localized MSI has an auto-generated ProductCode, as is recommended, so the transform will cause a change here too along with the actual texts.

Then, I've built a Burn Bootstrapper using the Standard Bootstrapper Application which based on an InstallCondition will select a x86 or x64 version of the installers. This bootstrapper is also localized.

The bootstrapper localization works fine. The MSI package localization works fine.

But, how do I bring them together?

There seems to be no way to actually use a localized MSI in a Burn chain. This hardly even makes sense. Why spend so much time and effort on making Windows Installers possible to localize, and also making the UI for the installation process localizable via Burn and the Standard Bootstrap Application and then not being able to use one from the other?

What am I missing? Via the wix mailing list, I've gotten an authoritative response essentially stating that "localization via MsiPackage transforms is not supported by Burn, and is non-trivial to implement" (not a literal quote, my interpretation). Still no suggestion or hint on how to actually achieve what I'm after: To install one of several possible localized MSIs based on the user culture with Burn.

I've tried doing essentially what is described here: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/My-experiences-making-a-multi-language-bundle-td7208949.html which is using InstallConditions to determine just what transform in a long chain of transform to use for the installation. This does not work, because upgrade and uninstall scenarios break in various ways.

Also, since I already have literally millions of users who have installed a non-localized MSI (what in the new scenario is the en-US baseline), I need to be able to upgrade these existing users, so all the localized MSIs need to have the same Upgrade Code as the existing MSI that is already installed in many systems.

Yes, I also did try the above method without actually using transforms, but the full localized MSI packages. Still no joy of setup, just a much larger installer.

Is there actually no-one out there who has the need to run a localized MSI Package from a Burn Bootstrapper, and has succeeded in creating such a thing?

It seems like it would be the on the Burn 101-curriculum: How to make an Burn bootstrapper to install a localized MsiPackage?

Am I missing something really obvious?

1

1 Answers

1
votes

Is it a requirement that your different-language products can be installed SxS?

If not, drop the change of ProductCode in your transforms. One of the problems you will have with burn is that it depends on the non-transformed MSIs values of ProductCode and UpgradeCode being exactly the same when the packages are installed.

In Burn you will need your own custom code running to setup the burn/bundle variable that you will use to set the TRANSFORMS msi property you will pass to the package (along with any others that also relate to language you find you must pass in). That probably means creating your own custom BA (I haven't ever gotten BA functions to work so I don't know if that would work, although that would seem to be a perfect solution for this).