【问题标题】:How can I keep WIX from resetting my users settings on updates?如何防止 WIX 在更新时重置我的用户设置?
【发布时间】:2014-05-06 17:09:18
【问题描述】:

我为我的应用程序设置了 WIX 安装程序,它可以正确安装和正确更新,只是它会重写在我的应用程序和相应 dll 中定义的默认用户设置(即在属性-> 设置中定义)。如何让 WIX 更新应用程序,但不更新用户设置?

【问题讨论】:

  • 您可能需要详细说明属性的安装位置和方式。它们是否安装在文件中?它们在注册表项中吗?它是什么类型的更新——补丁、重大升级?如果是重大升级,您的 RemoveExistingProducts 在哪里?如果它是在安装的早期,那么您将卸载所有旧文件和注册表项,然后安装所有新文件。
  • 这些是项目中定义的设置。它们通过 Properties.Settings.Default.MySetting 在代码中被引用,我相信它们存储在用户 AppData 文件夹中。
  • 我忘了补充……这些是小升级。

标签: wix


【解决方案1】:

无论是 ini、registry 还是 xml,概念都很简单。仅让安装程序负责安装默认设置。然后在您的应用程序上第一次运行时,将默认设置复制到用户设置一次。现在安装程序将永远不会损害用户设置,因为它甚至不知道它们的存在。

【讨论】:

  • 我想我可能走错了路。我相信这个答案stackoverflow.com/questions/14400943/… 回答了我的问题,但直到我们今天晚些时候发布我们的下一个测试版才能知道。
  • ClickOnce 不是 Windows Installer 技术。
  • 它可能不是......但实际答案指出问题实际上出在设置类的 ApplicationSettingsBase 基类中,而不是安装程序。或者至少这是我对它的理解。
【解决方案2】:

属性 -> 设置映射到您的应用程序的 app.config 文件,因此您可以将该特定文件的安装设置为 NeverOverwrite,这意味着更新不会覆盖您的 .config 文件.

工作示例:

<Component Id="SPECTRAVIEW.WPF.MAINAPPLICATION.EXE.CONFIG" Win64="$(var.Win64)" Guid="89E2C6C0-18FB-428B-A9EE-C2FAB3418CB2" NeverOverwrite="yes">
    <File Id="SPECTRAVIEW.WPF.MAINAPPLICATION.EXE.CONFIG" Name="SpectraView.WPF.MainApplication.exe.config" Source="$(var.MainApplication.TargetDir)\SpectraView.WPF.MainApplication.exe.config" KeyPath="yes" />
</Component>

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多