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


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

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

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

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

System.Environment.SpecialFolder.ApplicationData

12274
2018-02-25 11:54


起源



答案:


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

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


10
2018-02-25 11:58



我是否需要UAC才能访问 CommonApplicationData 像我一样 ApplicationData?也不意味着数据在同一台PC上的所有用户之间共享? - Chris
@Chris“这是不是意味着数据在同一台PC上的所有用户之间共享?”是的,但你以前存储它 Program Files 这是机器范围内的。 - David Heffernan


答案:


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

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


10
2018-02-25 11:58



我是否需要UAC才能访问 CommonApplicationData 像我一样 ApplicationData?也不意味着数据在同一台PC上的所有用户之间共享? - Chris
@Chris“这是不是意味着数据在同一台PC上的所有用户之间共享?”是的,但你以前存储它 Program Files 这是机器范围内的。 - David Heffernan


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

当然,Program Files就是 最差 即使从XP开始,也可以存储数据。


2
2018-02-25 12:04



你的意思是Program Files,ProgramData是NT6上常见的appdata文件夹的名称 - Anders
呀!我的脑袋坏了......谢谢安德斯! - Mario Vernari