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

11

我的应用程序需要存储数据,就像大多数应用程序一样。 该应用程序以前仅在XP上使用,在那里它将数据存储在Program Files中。现在我们的客户正在转移到Windows 7,因此我不得不升级它,以便将数据存储在一个新文件夹中。我选择了ApplicationData文件夹,因为我认为我将允许在不需要UAC的情况下访问。

现在,在某些Windows 7机器上,这很好,但在其他机器上,访问该文件夹失败,可能是由于权限问题,但以管理员特权运行程序时,程序可以正常工作。

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

我是否使用了错误的文件夹?还是这些情况只是个例?无论哪种情况,这种情况的最佳实践是什么?

System.Environment.SpecialFolder.ApplicationData
2个回答

10

System.Environment.SpecialFolder.ApplicationData 是每个用户的漫游路径,这似乎不是您需要的。您似乎需要机器范围内的设置,因此应使用 System.Environment.SpecialFolder.CommonApplicationData

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


我需要UAC来访问CommonApplicationData吗,就像我访问ApplicationData一样?同时这是否意味着数据在同一台电脑上的所有用户之间共享? - Chris
@Chris “这难道不意味着所有使用同一台电脑的用户都能共享数据吗?” 是的,但你以前是将其存储在Program Files中,而这是整个计算机范围内的。 - David Heffernan

2

David是正确的。 据我所知,通过ClickOnce或Installer部署应用程序也有一些差异:前者允许比普通安装程序更少的权限子集。 我必须承认我在这方面不是专家。

当然,自从XP以来,Program Files是存储数据的最糟糕的地方。


你的意思是Program Files、ProgramData是NT6上常见的应用数据文件夹的名称。 - Anders
哎呀!我的头有点晕了……谢谢Anders! - Mario Vernari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接