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

本文关键字:CommonApplicationData 文件夹 WPF 应用程序开发 | 更新日期: 2023-09-27 18:06:38

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

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

第二,CommonApplicationData目录需要对运行应用程序的所有用户都是可写的。这个目录对所有用户都可写吗?看看我本地机器上的文件夹安全性,看起来只有用户的读/执行权限(windows 8.1)。当使用windows安装程序(WIX)安装应用程序时,我需要设置权限到CommonApplicationData'Company'AppName目录吗?

我尝试搜索使用CommonApplicationData的推荐实践,但无法找到我问题的答案。

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

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

c: ' programdata '生产' '公司MyApp.config

包含应用程序的默认设置。它在安装期间被写入,通常不会被用户再次写入。它是由It或其他管理员管理的。所以用户不能写这个是正确的。

你的应用程序实际上应该使用ApplicationData来写。

C: ' '约翰' AppData '漫游用户产品' '企业' MyApp.config

如果配置中的默认值为true,而用户将该值设置为false。代码将写入用户的配置,但通用或默认配置不会改变。

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

现在,如果您有一个文件,您希望所有用户更改和所有用户共享,并且一个用户更改它更改了另一个用户,我将简单地使该文件驻留在CommonApplicationData中,并通过在安装过程中设置权限使其可写

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

当您需要存储应用程序的所有用户共同的数据时在本地,微软建议使用System.Environment.SpecialFolder.CommonApplicationData。此外,他们还建议在这里创建一个子文件夹,其中包含公司名称和ApplicationName文件夹中的子文件夹。
这样做的问题是,您创建的文件夹和文件只有读取/执行权限创建者以外的其他用户的权限。这意味着它们不可能是附加到没有UAC标高的另一个用户或被另一个用户替换。

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

下面的类地址这是通过为CompanyName上的所有用户设置读/写权限来实现的文件夹,并可选地设置文件的读写权限ApplicationName文件夹在创建和子文件夹/文件继承这些权限。

相关文章:
  • 没有找到相关文章