0

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

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

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

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

编辑:

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

决定:

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

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

谢谢夏娃。

4

3 回答 3

2

我会在Environment.SpecialFolder枚举中使用一个文件夹。

例子:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
于 2012-12-14T17:39:20.770 回答
1

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

于 2012-12-14T17:55:38.773 回答
1

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

更新

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

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

第二次更新

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

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

于 2012-12-14T17:39:39.413 回答