I have a wix bundle (with managed bootstrapper) consisting of
- 4
ExePackages
(3rd party setups - allperMachine
) - 1
MsiPackage
(our application setup)
Since we update our application multiple times a month, we don't want the user to need admin rights for every update. Usually just our application needs to be updated, because 3rd parties are changing very rarely (on update process they get skipped if they have not changed).
To reach our goal of minimum required admin rights we thought it's an good idea to install into %LocalAppData%
(perUser
installation). Then we would only need admin rights on updates, if any of the 3rd parties have changed. But if our customer wants to install our application on a TerminalServer he sure wants to install it just one time for all users. So our files should be installed into C:\Program Files (x86)
(perMachine
installation).
To cover both scenarios, we made a Dual Purpose Package
. Here we can decide at runtime, which type of installation is needed.
The problem: As already answered on stackoverflow, Burn (wix boostrapper engine) isn't able to deal with Dual Purpose Packages
. (As I figured that out, I was literally freaking out)
My question: Is there a workaround? Is there any other possibility to reach my goal? Maybe another solution for installation on terminal servers. I'm stuck now. I don't wanna "install" our application using a self extracting archive or something like that instead of a msi package.
New approach 1: A different approach would be a update service. At the initial installation, we could install our application files to C:\Program Files (x86)
and install then a update service which runs under LocalSystem
. If there is an update available, our update sevice running as LocalSystem
would have enough rights to do the update. Is there something like that already available? It doesn't have to be free, but i couldn't find anything :(
New approach 2: I could add a new "dummy" msi package to the bundle, which never gets installed. In this package I set InstallScope
to perUser
. This forces the bundle at compile time to be a perUser
bundle. Here's what would happen (according to which option the user selects in our bootstrapper ui)
- case 1 - user select
perUser
installation: Everything should be fine. Our bundle is fixed to beperUser
and ourdual purpose package
(application msi) gets executed inperUser
mode (parameter MSIINSTALLPERUSER="1"). A cleanperUser
installation, that's good! - case 2 - user select
perMachine
installation: Our bundle still gets installed just for the current user (fixedperUser
bundle). So just the current user can see our bundle in "programs & features" and again just he can uninstall the bundle. That's not good. Regardless of that, our application msi gets installedperMachine
(parameter "MSIINSTALLPERUSER=""). Not good, but also no disaster (or am I missing something?)
In my opinion, the second approach is a decent solution. If Burn
will get support for dual purpose packages
some day, I would just have to drop the then unnecessary dummy msi package and everything is fine.
Thank you guys very much in advance!