Registry issue when upgrading

前端 未结 2 1423
猫巷女王i
猫巷女王i 2021-01-17 04:21

The old version of the setup was created with InstallScope=\"PerMachine\". The new version is intended to have InstallScope=\"PerUser\"; it also needs to u

2条回答
  •  我在风中等你
    2021-01-17 04:51

    I have to add this as an answer, too long as a comment. I will "evolve" it once you provide more information:

    • Why do you want to switch to per-user installation? In the MSI world this is not an ideal way to deploy. An application is usable per-user even if installed per machine. With a per-machine install you simply add the ability to write shared settings that should not be overridden by a user. And your application is easier to upgrade, uninstall, patch and manage overall.

    • Here are a few more links to explain some of the problems with per-user setups. They are real, I am only trying to warn people what problems they are most likely going to face (almost certainly going to face):

      • Having an issue with WIX upgrade
      • Understanding “Per-User” or “Per-Machine” context for application Setup packages
    • Are you deploying HKCU or HKLM keys? I would not recommend writing any HKCU values from your setup, they should be written by the application itself. A setup is for writing to HKLM and other places that require "elevated rights". It should never be used to write user preferences. There will be interference when you do upgrades (as you have experienced).

    • Where is the registry data you speak of stored? In a single MSI component or several? Is there anything else in that component that still needs to be installed without the registry keys? If you can, please add your source WiX file so we can see for sure.

    I am sure that we can make all these problems go away if you follow our advice precisely. You are facing a very common MSI problem.

    Let me attempt a tentative answer without having all the information:

    1. Remove all HKCU registry information from your setup (if you can).
    2. Update your application to write these HKCU values itself, and ideally write to a brand new location in the registry instead of the old one. For example HKCU\Software\MyCompany\MyApp\5 instead of HKCU\Software\MyCompany\MyApp. This "decouples" your old and new state, and you got room to maneuver and clean up things.
    3. Making your application write the HKCU keys is not a hack, but the right thing to do. It will make your application much more robust and generally easier to QA for yourself and your team. You can "wipe the slate clean" during testing and start over without a reinstall - in order to focus on application testing.
    4. Put any remaining HKLM settings in a single WiX component and set a good key path that will never be modified or deleted by the user or any other process. For example: HKLM\Software\MyCompany\MyApp\5\MyAppHKLMKeyPath = 1
    5. If you discover that you have to override a value for each user (in other words change something for every user in HKCU), you can do this with this approach which combines what the setup does with the application itself: http://forum.installsite.net/index.php?showtopic=21552 (if this is important, please read the whole, linked thread).

提交回复
热议问题