【问题标题】:How to give Create, Read and Modify permissions to all users for a file created by my application in C:\ProgramData?如何为我的应用程序在 C:\ProgramData 中创建的文件授予所有用户创建、读取和修改权限?
【发布时间】:2012-12-02 17:52:53
【问题描述】:

我的应用程序基本上在C:\ProgramData\MyAppFolder 中创建了一个 XML 文件,并将配置设置转储到其中。

我需要允许标准用户有权添加或删除这些配置文件的设置。现在我看到标准用户只有读取/执行权限,但没有“完全控制”。

我已经看到其他问题正在通过修改特定文件夹权限的方法得到解答,但我不想更改默认权限级别,因为它可能会被系统管理员重置。

如果C:\ProgramData 无法将访问权限授予所有用户,是否有最适合应用程序需求的文件夹?

编辑:

我最初的问题可能具有误导性。我不想授予用户权限,而是允许应用程序在所有用户运行时修改 XML 文件。

决定:

我认为在 ProgramData 中创建文件夹时更改权限是唯一的选择。

如果这是不可能的,CommonDocuments 就是要走的路。

谢谢夏娃。

【问题讨论】:

  • I don't want to change the default permission level, since it might be reset by a system admin. -- 管理员控制计算机上的权限,而不是您。如果管理员不希望某个文件成为所有用户的完全控制权,您无法决定它。
  • 我同意这一点。出于确切原因,我想知道是否有其他文件夹可以完成这项工作。
  • 管理员可以锁定任何文件夹中的任何文件。
  • 管理员肯定可以。但我提到的原因是我不想更改文件夹的默认权限,这可能会在不知不觉中被管理员重置。

标签: c# .net permissions user-accounts


【解决方案1】:

我会使用Environment.SpecialFolder 枚举中的文件夹。

例子:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

【讨论】:

  • 这不是用户特定的吗?我想要一个在所有用户运行时都可以由应用程序读取/写入的文件。
  • 您可以使用:Environment.SpecialFolder.CommonDocuments
  • C:\ProgramData = Environment.SpecialFolder.CommonApplicationData
  • @BryanJ 他会使用那个文件夹回到他最初的问题。
  • @Eve,对不起,我误解了你的回答。您建议写入不同的位置,而不是如何访问 ProgramData。明白了。
【解决方案2】:

不应允许用户向该目录写入任意数据。这相当于普通用户能够修改C:\Users\AllUsers 目录。如果用户需要修改这个目录,你就有严重的设计缺陷,应该重新考虑这种方法。应该发生的事情是为用户提供 GUI 界面以与之交互,该界面在幕后操纵这些值而不给他们直接访问权限,类似于大多数编程语言中 getter/setter 的工作方式。不用说,当普通用户可以为其他用户破坏系统时,这是一个非常大的安全漏洞。

更新

我不想让用户直接访问该文件。我的问题 可能具有误导性。我想让程序有完整的 即使文件由所有用户运行,也可以控制文件。我其实是 这样做:“为用户提供 GUI 界面以与之交互 在幕后操纵这些值而不直接给出它们 访问”

这个article 有太多信息无法在此处发布,将提供有关保持安全以不泄漏权限的详细信息。您要做的第一件事是确保您的应用程序用户在自己的组中,并且不能登录/拥有任何特殊权限。您可以做的是将这个组添加到具有写入权限的目录中,这将允许该应用程序执行这些任务。如果这不可能,您将需要在 UAC 中工作,以免破坏系统的安全性,如上文所述。

第二次更新

感谢您的链接。关于其他一些可以做的文件夹的任何建议 工作,而不是弄乱权限?

当然,您可以将其写入应用程序写入的目录,即C:\Program Files\Some Awesome Program,这样可以将所有内容保存在一个地方,您只需担心您的用户/组以及安装它的人拥有的任何内容允许。它还可以防止其他人弄乱它,除非他们当然是管理员。

【讨论】:

  • 我不想让用户直接访问该文件。我的问题可能具有误导性。我想让程序完全控制文件,即使它由所有用户运行。我实际上是在这样做:“为用户提供 GUI 界面以与之交互,在幕后操纵这些值,而不给他们直接访问权限”
  • 感谢您的链接。关于其他可以完成这项工作的文件夹有什么建议,而不是弄乱权限?
  • 你不能让你的应用程序写入 Program Files,至少在 Vista 和更高版本上是这样。
  • @BryanJ 我很确定我在家里安装的 postgres 写入了程序文件,除非我在你所说的内容中遗漏了什么
  • @Woot4Moo,您无法写入 ProgramFiles,但我不确定确切的规则。它可能会将您的写入重定向到安全位置,并且可能取决于您是否是管理员。但基本上写入程序文件是禁止的,除非在安装期间。
【解决方案3】:

假设您有应用程序的安装程序,您的安装程序可以在您的应用程序将具有读/写访问权限的通用 appdata 目录(又名 C:\ProgramData)中创建一个子文件夹。根据您选择的安装技术,您也可以设置该文件夹的权限,尽管这可能有点矫枉过正。我知道WiX 基本上你所要做的就是每台机器安装并确保创建子文件夹。

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多