2011-02-25 62 views
11

我的应用程序需要像大多数应用程序一样存储数据。该应用程序以前只用于XP中将其存储在Program Files中的数据。现在我们的客户正在转向Windows 7,我不得不升级它,以便将数据存储在新文件夹中。我选择了ApplicationData文件夹,因为我认为我可以在不需要UAC的情况下访问它。应用程序数据在Windows 7和Vista中的存储位置

现在在一些Windows 7计算机上这很好,但在其他人对该文件夹的访问失败,可能是因为权限,但当用管理员privelidges运行程序工作正常。

我使用错误的文件夹还是这些案例异常?无论哪种情况,这种事情的最佳做法是什么?

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

System.Environment.SpecialFolder.ApplicationData 

回答

10

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

因为CommonApplicationData是所有用户共享的,所以默认的访问控制是有限的。默认情况下,标准用户不能在此位置写入。建议的做法是在安装时创建一个CommonApplicationData的子文件夹,并为其分配适当的宽容访问控制设置。

+0

我需要UAC像'ApplicationData'一样访问'CommonApplicationData'吗?这也不意味着数据在同一台PC上的所有用户之间共享吗? – Chris 2011-02-25 12:01:13

+0

@Chris“这不就是说数据在同一台PC上的所有用户之间共享吗?”嗯,是的,但你之前将它存储在机器范围内的'Program Files'中。 – 2011-02-25 20:17:02

2

大卫是对的。 据我所知,如果您通过ClickOnce或Installer部署您的应用程序,也会有一些差异:第一个允许比正常安装程序少一部分权限。 我必须承认我不是那方面的专家。

当然,程序文件是最糟糕的地方存储数据,即使从XP。

+0

你的意思是Program Files,ProgramData是NT6上常用的appdata文件夹的名字 – Anders 2011-02-25 12:32:03

+0

Ya!...我的脑袋坏了...谢谢安德斯! – 2011-02-25 13:12:54

相关问题