在Windows 7和Vista中存储应用程序数据的位置

时间:2011-02-25 11:54:26

标签: c# windows-7 uac application-settings special-folders

我的应用程序需要像大多数一样存储数据。该应用程序以前仅在XP上使用,它将数据存储在Program Files中。既然我们的客户正在转向Windows 7,我必须升级它,以便将数据存储在新文件夹中。我选择了ApplicationData文件夹,因为我认为我可以在不需要UAC的情况下访问该文件夹。

现在在某些Windows 7计算机上这很好,但在其他计算机上访问该文件夹失败,可能是因为权限,但是当使用Administrator privelidges运行时,程序运行正常。

我使用的是错误的文件夹还是这些案例的异常值?在任何一种情况下,这种事情的最佳做法是什么?

我使用以下C#SpecialFolder来获取AppData文件夹位置。

System.Environment.SpecialFolder.ApplicationData

2 个答案:

答案 0 :(得分:10)

System.Environment.SpecialFolder.ApplicationData是每用户并漫游。这听起来不像你想要的。您似乎需要机器范围设置,因此应使用System.Environment.SpecialFolder.CommonApplicationData

由于CommonApplicationData在所有用户之间共享,因此默认访问控制受到限制。默认情况下,标准用户无法在此位置写入。建议的做法是在安装时创建CommonApplicationData的子文件夹,并为其分配适当的许可访问控制设置。

答案 1 :(得分:2)

大卫是对的。 据我所知,如果您通过ClickOnce或Installer部署您的应用程序也存在一些差异:第一个允许一些权限子集而不是普通安装程序。 我必须承认我不是那方面的专家。

当然,即使从XP开始,Program Files也是最差存储数据的地方。