如何为WPF应用程序开发和使用CommonApplicationData特殊文件夹

时间:2014-06-04 18:17:01

标签: c# wpf winforms wix

我有一个WPF应用程序,可以在本地存储资源文件。资源文件由应用程序启动时运行的进程保持最新。资源文件经常更新,并且对于运行应用程序的每个用户都是通用的,因此CommonApplicationData是存储这些资源文件的最佳位置。

我有两个关于CommonApplicationData特殊文件夹的使用和开发的问题。首先,如果我在Visual Studio中开发应用程序,它将用于CommonApplicationData路径?我不希望资源文件存储在CommonApplicationData中,因为在开发应用程序时,这不是存储文件的正确位置。我想到的解决方案是在应用程序中有任何内容引用| DataDirectory |然后,如果配置设置为Debug,请将DataDirectory设置为应用程序的bin目录。如果配置设置为Release,请将DataDirectory设置为CommonApplicationData \ Company \ AppName目录。这是推荐的处理方法吗?

其次,运行应用程序的所有用户都需要可写入CommonApplicationData目录。此目录是否可写入所有用户?查看本地计算机上的文件夹安全性,看起来只有用户的读取/执行权限(Windows 8.1)。使用Windows安装程序(WIX)安装应用程序时,是否需要将权限设置为CommonApplicationData \ Company \ AppName目录?

我尝试搜索使用CommonApplicationData的推荐做法,但无法提出我的问题的答案。

2 个答案:

答案 0 :(得分:1)

在安装过程中,您应该在CommonApplicationData中创建一个文件夹。通常首选的文件夹结构如下:

C:\ programdata \公司\产品\ MyApp.config

这包含Applications DEFAULT设置。它是在安装期间写入的,通常不会被用户再次写入。它由IT或其他管理员管理。因此,用户无法写入此内容是正确的。

您的应用程序实际上应该使用ApplicationData进行编写。

C:\用户\约翰\应用程序数据\漫游\公司\产品\ MyApp.config

因此,如果配置中的默认值为true,则用户将此值设置为false。代码将写入用户的配置,但Common或Default配置不会更改。

您的应用程序应首先从ApplicationData加载配置,如果ApplicationData不存在,请从CommonApplicationData加载配置。

现在,如果您有一个文件,您希望所有用户都要更改并且所有用户都要共享,而一个用户更改它会将其更改为另一个用户,我只需将该文件驻留在CommonApplicationData中并通过设置安装过程中的权限。

答案 1 :(得分:0)

你声称搜索了答案,但当我搜索CommonApplicationData时,Bing上的第二个结果(Google上的第六个)是关于Code Project的文章,在第一句中提到微软建议存储数据对CommonApplicationData特殊文件夹中的所有用户创建数据的CompanyName / ProductName子文件夹...作者继续提供一个类,可用于为CompanyName文件夹的所有用户设置读/写权限。 / p>

  

当您需要存储应用程序的所有用户共有的数据时   在本地,微软推荐使用   System.Environment.SpecialFolder.CommonApplicationData。   此外,他们还建议使用您的CompanyName和。在此处创建子文件夹   ApplicationName中的子文件夹   这个问题是您创建的文件夹和文件只有读/执行   除创建者之外的其他用户的权限。这意味着他们不可能   附加到或替换为没有UAC提升的其他用户。

     

虽然我理解这个的原因,但事实上它创造了一个   共享动态数据存储的问题。

     

以下课程解决   这是通过为CompanyName上的所有用户设置读/写权限   文件夹和可选的设置读/写权限   创建和子文件夹/文件上的ApplicationName文件夹继承这些   权限。