【问题标题】:Windows data storage for all users适用于所有用户的 Windows 数据存储
【发布时间】:2016-11-13 14:09:31
【问题描述】:

在 Window 7、8 和 10 上,我希望我的应用程序将数据存储在共享位置,以便在 PC 上运行该应用程序的所有用户都可以访问相同的数据。数据是可读/可写的。我应该使用什么位置?

【问题讨论】:

  • 您的应用程序是否安装在程序文件目录中?如果是,您可以使用应用程序的文件夹来存储数据。如果没有,您可以使用Program Files\Common Files 文件夹。
  • @Sнаđошƒаӽ 这不是Common Files 的用途。 Common Files 现在未使用,但它适用于由多个(可能单独安装)应用程序共享的不可变公共组件,例如库和实用程序 - 典型示例是(旧的,2007 年之前的)Microsoft Equation Editor,它将是例如,通过单独的 Word 和 PowerPoint 独立安装来安装。
  • @Dai 谢谢,不知道。我有点认为Common Files 是一个常见的 dump :P。您的回答非常有用。这一切都不知道。 ;-)

标签: windows


【解决方案1】:

Windows 对程序的共享数据有一些有趣的规则。

  • 程序文件(“C:\Program Files”和“C:\Program Files (x86)”)用于不可变(只读)程序数据和可执行文件 - 因此此处的文件需要管理员权限才能编辑。因此,它对于不应该被破坏的重要文件(例​​如您的主要可执行文件)非常有用。这就是安装程序以提升的权限运行的原因。如果您的程序具有自动更新机制,那么它也需要在升级后运行。
  • 程序数据C:\ProgramData 在 Windows Vista 及更高版本上,或C:\Documents and Settings\All Users\Application Data)用于可变程序数据 - 您无需管理权限即可在此文件夹中创建文件,除非一旦创建文件已创建只有最初创建该文件的用户可以随后编辑它(尽管每个人都可以阅读它)。这是特殊的CREATOR OWNER 权限。
  • AppDataC:\Users\(you)\AppData\LocalC:\Users\(you)\AppData\Roaming)是用户特定的,旨在用于用户特定的设置、配置和数据。 Local 版本应用于在用户使用漫游配置文件时不应漫游的机器特定设置,例如数据缓存(例如浏览器缓存)。

因此,在您的情况下,ProgramData 看起来很理想,但您需要注意默认的 CREATOR OWNER 规则 - 但有一种解决方法:您的程序安装程序(将以管理员身份运行)能够更改 ACL 权限在其 ProgramData 子目录中,以允许其他用户编辑文件。我建议授予Users 组权限而不是Everyone,以防止未经身份验证的用户可能进行的远程攻击和修改。

【讨论】:

  • 我不再确定(昨天问a question about this%ProgramData% 是专门用于可变数据的——如果由管理员运行的安装创建那里有一个文件夹,那么它实际上是“不可变的”,即使对于已安装的应用程序也是如此,因为大多数应用程序现在表现良好并且无需提升权限即可运行。
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2011-02-28
  • 2019-11-16
  • 2018-08-21
  • 2021-04-15
相关资源
最近更新 更多