【问题标题】:Neatest way of preserving application settings between upgrades?在升级之间保留应用程序设置的最佳方式?
【发布时间】:2012-05-24 13:31:19
【问题描述】:

我们的产品有几个用户定义的设置,迄今为止,这些设置已使用项目的设置变量进行存储,例如

public string MySetting {
  get { return Settings.Default.MySetting; }
  set { 
    Settings.Default.MySetting = value;
    Settings.Default.Save();
  }
}

这很好用 - 但它有一个不幸的特点,如果您卸载应用程序并重新安装较新版本(不存在直接升级路径 - 不要问),所有设置都会丢失。

我可以想出几种方法来实现这一点,但它们对我来说似乎都有些笨拙。您认为在卸载和重新安装之间保留用户定义的应用程序设置的最佳方式是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    在 Windows 上,我能想到有两种方法可以实现这一点。第一个是简单地将 XML/INI/JSON/whatever 文件存储在用户的 AppData 文件夹中。这会将文件放在应用程序的路径之外,这意味着您可以轻松地再次获取它。您可以像这样找到 AppData 文件夹:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    

    另一个适合此类数据的地方是注册表。 .NET 框架对此有很好的支持。 MSDNother places 上有很多文档可以帮助您入门。

    【讨论】:

      【解决方案2】:

      您可以向 UnInstall 添加自定义操作,询问用户是否要保留用户设置或删除所有数据。

      如果用户决定保留设置,您可以在安装路径中保留一个设置文件以保留所有参数,并向安装添加自定义操作,将安装时的设置替换为旧文件的设置。

      您还可以将值添加到注册表中,并在安装中检查它们。

      【讨论】:

        【解决方案3】:

        我知道对于 ClickOnce 应用程序,一个简洁的功能是使用用户设置来指示是否需要更新,默认设置为 true。然后,例如在Program.cs,你可以这样:

        if (Properties.Settings.Default.SettingsUpgradeRequired)
        {
            Properties.Settings.Default.Upgrade();
            Properties.Settings.SettingsUpgradeRequired = false;
            Properties.Settings.Default.Save();
        }
        

        即使您不使用 ClickOnce 作为您的部署方法,这是否适用于您的情况?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-10
          • 2011-05-19
          • 2011-09-10
          • 2015-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          相关资源
          最近更新 更多