如果您有一小组键/值对且值不大,那么注册表非常适合使用 - 并且您不关心xcopy部署 - 那么请使用注册表(我知道这不是很准确,但通常在使用注册表变得繁琐时很明显)。
如果您想要xcopy部署,则数据必须与程序位于同一文件夹中 - 但程序可以位于AppData文件夹下的任何位置,不一定要位于“程序文件”下。
仅在需要或必须使用它时使用隔离存储 - 例如ClickOnce。
否则,请使用AppData\Roaming,仅在有充分理由时才使用Local或LocalLow。
编辑:以下是Roaming、Local和LocalLow之间的区别:
Windows有一个鲜为人知的功能叫做“漫游配置文件”,一般的想法是在启用此功能的企业环境中,任何用户都可以使用任何计算机。
当用户登录时,他的私有设置会从服务器下载,当他注销时,他的设置会上传回服务器(实际过程更复杂,显然)。
Vista中的用户“Roaming”文件夹或XP中的“Application Data”中的文件会随用户移动 - 因此任何设置和数据都应存储在那里。
Vista中的“Local”和“LocalLow”下的文件以及XP中的“Local Settings”下的文件不会移动,因此这是临时文件、与特定计算机相关或可以重新计算数据的好地方。
在Vista中,作为我们都熟知和喜爱的新安全功能的一部分,您可以将程序运行在“低完整性模式”中(例如IE受保护模式),这些程序使用降低的权限运行,并且无法访问用户个人资料文件夹中的文件 - 除了位于“LocalLow”文件夹下的文件。
因此,总之,存储在“LocalLow”中的文件本质上是不安全的,“Local”/“Local Settings”中的文件可能在某些大公司中无法使用 - 因此,除非您有充分理由并确切知道自己在做什么,否则选择“Roaming”/“Application Data”。
你可能想考虑使用隔离存储。
我不知道是否有一个固定的规则,但需要考虑的一件事是注册表是事务性的——它对于并发读/写操作更安全。因此,如果您的用户数据可能会在运行时由多个线程写入(或者如果您的产品包中有多个exe文件),请考虑使用注册表。
历史: 据我所听,微软从.ini文件转向注册表的一个原因就是为了尝试解决并发访问问题。
.Net(某种程度上)以xml .config文件的形式回到了.ini文件,但是这些配置文件不应该在运行时被写入(或者至少不应该存在并发的写入者/读者)。
更多信息:http://blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx