【问题标题】:Windows: Which folders always offer write permissions?Windows:哪些文件夹始终提供写入权限?
【发布时间】:2016-09-26 04:40:05
【问题描述】:

这个问题很清楚。

哪些(Windows-)文件夹始终具有写入权限?

所以我需要在任何系统上为任何应用程序找到一个始终具有写入权限的文件夹。

目前我使用 %AppData%,但我收到一些用户的通知,指出该路径没有写入权限(尤其是在公共计算机上)。

【问题讨论】:

    标签: windows permissions directory rights appdata


    【解决方案1】:

    哪些文件夹可写不仅取决于操作系统,还取决于该计算机上安装的安全/防护系统。一些防病毒软件或系统管理员可以在计算机上安装/创建非常受限的数据访问策略。对于公用计算机,很可能 %TEMP% 文件夹可能是唯一常见的可写文件夹。如果没有对 temp 的写入访问权限,许多应用程序将根本无法运行。当然,你不能指望数据会永久保存在 temp 文件夹下。

    如果你不需要考虑漫游数据,第二个有希望的地方是用户的本地数据文件夹,通常是 AppData/Local。同样,这取决于该计算机上的访问限制类型。

    查看有关 Windows appdata 文件夹的链接。

    https://msdn.microsoft.com/en-us/windows/uwp/app-settings/store-and-retrieve-app-data

    【讨论】:

    • 我需要永久存储数据。我知道公共计算机可能会受到限制,我将无法永久存储任何数据,但我正在寻找一个最有可能提供写入权限的地方。 %AppData% 解析为 AppData/Roaming,所以您的建议是切换到 AppData/Local?我不认为 Windows-API 是要走的路。外部应用程序/库(有时是用户)必须能够访问这些文件。
    • 我并不是说你应该使用 Windows API。它是 Windows 如何定义其文件夹使用的参考。 %appdata% 解析为 AppData/Roaming,%localappdata% 解析为 AppData/Local。在权限控制方面,我认为没有什么区别。这实际上取决于您是否要在本地存储数据。如果您的应用程序必须存储一些数据才能成功运行,您可以尝试使用位置列表。先说 %AppData%,然后说 %LocalAppData%,最后说 %TEMP%,这应该给用户一个警告,数据可能会被系统清除。
    • 实际上漫游数据可能有更严格的政策,因为它会被复制到文件服务器,然后与其他设备同步。潜在的恶意漫游数据可能会比本地数据造成更大的损害。
    【解决方案2】:

    尽管某些安全模型可能会限制它,但 %PUBLIC% 目录很有可能是公平的游戏。

    【讨论】:

      【解决方案3】:

      Windows 提供了专门供应用程序使用的漫游应用程序数据文件夹和本地应用程序数据文件夹。如果系统管理员已锁定这些,则可能意味着用户不应该运行第三方应用程序。 (唯一明显的可能性是系统管理员不称职。)

      其他可能性包括 Documents 文件夹...基本上任何每个用户的文件夹在正常情况下都应该是可写的。当然,系统管理员可以使这些中的任何一个不可写。但这不应该是你的问题。

      请注意,您应该使用 SHGetKnownFolderPath 函数或等效函数来确定文件夹路径,而不是读取环境变量。您尚未指定您的语言,但关于如何执行此操作的问题已经回答了很多。

      此外,您不应将文件直接写入应用程序数据文件夹;相反,创建一个子文件夹并将文件放在那里。

      【讨论】: