为.NET应用程序存储用户设置的最佳方法是什么?

时间:2020-03-05 18:42:53  来源:igfitidea点击:

我有一个.NET 2.0 Windows窗体应用程序。商店用户设置(根据Windows准则)的最佳位置在哪里?

有人指出了" Application.LocalUserAppDataPath"。但是,这将创建一个文件夹结构,如下所示:

C:\Documents and Settings\user_name\Local Settings\Application
  Data\company_name\product_name\product_version\

如果发布应用程序的版本1并在其中存储XML文件,则发布版本2,它将更改为其他文件夹,对吗?无论应用程序版本如何,我都希望每个用户有一个文件夹来存储设置。

解决方案

回答

设置是标准键值对(字符串-字符串)。如果可以的话,我可以将它们包装在XML文件中。

我宁愿使用文件系统而不是注册表。它似乎更容易维护。在支持方案中,如果用户需要手动打开/更改设置,则在文件系统中时会更容易。

回答

除了产品版本,我将浏览我们发布的文件夹列表。我们不希望在发布更新后重置设置。

由于调试/占用空间的原因,我实际上正在远离用户设置的注册表。我目前仅在注册表中存储一些基本设置(窗口大小,位置,数据文件的版本),并且如果更新变差或者用户丢失了第二台显示器,我会遇到更多问题。该应用程序正在向。他们中的一些人很精通,可以理解regedit,但是对于其余的人,他们必须重新安装,这很快,但是我认为他们有些抱怨。对于基于文件的版本,我要做的就是让他们在记事本中打开XML文件并进行快速调整。

另外,我希望使我的应用程序可以通过USB闪存驱动器运行,并且将设置绑定到文件中似乎对该过程更为友好。我敢肯定我可以做一些代码来检查/清理注册表,但是我认为我们大多数人已经厌倦了注册表混乱,如今似乎已经把我们的机器吃光了。

我知道在此方面需要进行一些安全性折衷,但是我要排序的数据都不是导致此问题的关键,并且由于应用程序的大小,我不会遭受任何性能损失。

回答

我喜欢使用内置的"应用程序设置"。然后,如果我们希望在设计时或者运行时使用设置设计器,则内置了对使用设置设计器的支持:

// read setting
string setting1 = (string)Settings.Default["MySetting1"];
// save setting
Settings.Default["MySetting2"] = "My Setting Value";

// you can force a save with
Properties.Settings.Default.Save();

它确实将设置存储在与我们描述的文件夹结构类似的路径中(路径中带有版本)。但是,只需调用以下命令即可:

Properties.Settings.Default.Upgrade();

该应用程序将拉入所有以前的版本设置以保存。

回答

过去对我有用的一种方法是创建一个设置类,并使用XML序列化将其写入文件系统。我们可以通过创建设置对象的集合并对其进行序列化来扩展此概念。我们可以将所有用户的所有设置都集中在一个地方,而不必担心管理文件系统。

在有人给我任何部分重新发明轮子的能力之前,让我先说几句话。首先,序列化和写入文件只有几行代码。其次,如果我们有一个包含设置的对象,则在加载应用程序时无需多次调用appSettings对象。最后,添加代表应用程序状态的项目非常容易,从而使我们可以在下次加载应用程序时恢复长期运行的任务。

回答

或者将设置写入xml文件,然后使用隔离存储将其保存。根据我们使用的商店,它会将其保存在"应用程序数据"文件夹中。我们还可以选择启用漫游的存储,这意味着当用户登录另一台计算机时,设置将随之移动。

回答

隔离存储主要用于使用ClickOnce分发的应用程序,并在安全的沙箱中运行。基本路径已为我们确定,我们将无法在代码中进行推断。路径类似于" \ LocalSettings \ ApplicationData \ IsolatedStorage \ ejwnwe.302 \ kfiwemqi.owx \ url.asdaiojwejoieajae ....",但并不是那么友好。存储空间也有限。

瑞安·法利(Ryan Farley)说对了。