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

Changing per-user, per-machine

Hi, everyone -

I've spent a few hours scouring the forums for this, but no luck. Someone posted the same question a few years ago, but got no response. I'm hoping for better luck.

I'm looking for a way to change a per-user installation to a per-machine installation, ideally through a major upgrade. This is for a Basic MSI.

Initially, we released our product as a per-user (ALLUSERS not present in the property table), but then when IS 2008 came out and MS / IS recommended ALLUSERS be 1, we changed that with the next major version. ISSetAllUsers 'correctly' deletes the ALLUSERS property on a major upgrade, so we're not seeing errors (so long as the upgrade is run by the user who installed the old version, of course) - but we'd really like to get these installations to be per-machine.

I've seen something from Dickau saying that ALLUSERS must be the same for installed product and upgraded product, but I guess I'm hoping for a sneaky way around this.... or an absolute confirmation that it cannot be done.

Anyone? Anyone? Thanks.
Labels (1)
0 Kudos
(3) Replies
MichaelU
Level 12 Flexeran
Level 12 Flexeran

There are certainly various hacks you could explore (such as making the major upgrade item detect-only, removing the previous install via a custom action in the UI sequence, then fixing ALLUSERS to be what you want; or perhaps wiring up a prerequisite to uninstall the previous version), but I wonder if it wouldn't be more efficient and less error prone to detect this scenario and block with a message requesting they uninstall the existing per-user installation.
0 Kudos
Sairen
Level 7

Well, it's the central application for our solution, and in some cases may contain a database with all their enterprise info. So I don't think very many customers will accept having to uninstall the product, unfortunately.

So let me ask about the hack you're referencing...
(such as making the major upgrade item detect-only, removing the previous install via a custom action in the UI sequence, then fixing ALLUSERS to be what you want;

Why, if a major upgrade uninstalls the old product, must the ALLUSERS setting match, anyway?
And how risky vs. how reliable would you say this is?
Does the RemoveRelatedProducts action do anything but call msiexec /x {etc}?

Thanks for your help- I really appreciate it.
0 Kudos
MichaelU
Level 12 Flexeran
Level 12 Flexeran

ALLUSERS must match because otherwise the following scenario would be unpredictable:

User A installs the product per-user.
User B installs the product per-machine.
User A installs a major upgrade; which version does MSI try to remove?

The primary risk to going with a manual upgrade is that the previous package cannot be uninstalled during the execute sequence, such as in a silent install; a proper major upgrade can uninstall it regardless of UI level. There are other various differences between a proper major upgrade and a plain msiexec /x, such as whether UPGRADINGPRODUCTCODE is provided to the uninstalling product; I'm not sure what others there are.
0 Kudos