如何确定每用户状态的存储位置?注册?应用程序数据?隔离存储?

时间:2009-05-19 12:36:34

标签: c# wpf windows winforms registry

Windows注册表何时应该用于每用户状态,何时应该使用文件系统,特别是用户的AppData文件夹? (例如,C:\ Users \ USERNAME \ AppData)。隔离存储在哪里?

是否有一个相当坚定的规则,或者它只是一个模糊的事情,比如“使用注册表直到它变成太多数据存储在注册表中”。或者“使用你想要的任何东西。”

是否存在影响决策的Windows徽标要求?

如果我使用AppData目录,如何在Local,Roaming和LocalLow之间进行选择?

编辑:我刚刚注意到这些类似的问题:

我将总结回复。

4 个答案:

答案 0 :(得分:13)

如果您有少量的键/值对且值不大,则注册表很棒 - 而且您不关心xcopy部署 - 然后使用注册表(我知道这不是确切的,但是当使用注册表变得很痛苦时,通常很明显。

如果你想要xcopy部署,数据显然必须与程序在同一个文件夹中 - 但程序可以在AppData文件夹下的某个位置,它不必在“程序文件”下。

仅在您需要时使用隔离存储或必须使用它 - 例如ClickOnce。

否则使用AppData \ Roaming,只有在有充分理由的情况下才使用Local或LocalLow。

编辑:这是Roaming,Local和LocalLow之间的区别:

Windows有一个鲜为人知的功能,称为“漫游配置文件”,一般的想法是,在启用此功能的企业环境中,任何用户都可以使用任何计算机。

当用户登录他的私人设置时,从服务器下载,当他退出时,他的设置被上传回服务器(实际过程显然更复杂)。

用户在Vista中的“漫游”文件夹或XP中的“应用程序数据”中的文件随用户一起移动 - 因此任何设置和数据都应该存储在那里。

vista中的“Local”和“LocalLow”下的文件以及XP中的“Local Settings”都没有,因此它是临时文件,与特定计算机相关的东西或可以重新计算的数据的好地方。

在Vista中,作为我们都知道和喜爱的新安全功能的一部分,您可以让程序以“低完整性模式”运行(例如IE在受保护模式下),这些程序以降低的权限运行,但不能访问用户配置文件中的文件 - “LocalLow”文件夹下的文件除外。

因此,总而言之,存储在“LocalLow”中的文件本质上是不安全的,并且“本地”/“本地设置”中的文件可能在某些大公司中不可用 - 所以除非你有充分的理由并确切地知道你是什么使用“漫游”/“应用程序数据”。

答案 1 :(得分:5)

不要弄乱我的注册表谢谢。

使用隔离存储,这就是它的用途。

请参阅Was The Windows Registry a Good Idea?关于Jeffs博客......

答案 2 :(得分:4)

您可能需要考虑Isolated Storage

答案 3 :(得分:1)

我不知道是否有一个严格的规则,但有一点需要考虑的是注册表是事务处理 - 它对并发读/写操作更安全。因此,如果您的用户数据可能在运行时由多个线程写入(或者如果您的产品包中有多个exe),请考虑使用注册表。

历史: MS(我听说)从.ini文件到注册表的一个原因正是为了尝试处理并发访问问题。

.Net(有点)以xml .config文件的形式返回到.ini文件,但是那些配置文件不应该在运行时写入(或者至少如果有可能并发写入器的话)器/读取器)。

更多信息:http://blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx