2010-04-12 321 views
1

有人能告诉我如何在Delphi 2006中设置文件权限吗?我正在使用TINIFile.Create在我的应用程序中创建INI文件。问题是,如果我以管理员身份登录到Windows时创建文件,然后尝试以标准用户身份运行应用程序并覆盖INI文件,我没有权限这样做。我把文件放在AllUsers \ ApplicationData \ MyProduct文件夹中。我想设置权限到这个文件夹。我需要AllUsers对MyProduct文件夹拥有完全权限。如果它可能通过WindowsAPI来完成,那很好,因为我还需要在C++和C#中完成这项工作。我非常感谢任何帮助。谢谢!在Windows中设置用户访问权限

回答

3

虽然你可以做各种与德尔福正确的代码(如管理员)更好的应用结构是不能假设你的App有任何特权权限更改(你说你希望它运行在用户模式)。而是使用将安装您的应用程序(例如Inno Setup)的安装程序将合适的Ini文件模板复制到您所需的数据文件夹中。您可以在文件复制行上使用“权限:用户修改”指定所需的权限。

+0

+1正确 - 总是创建一个具有最低权限的应用程序,以完成它需要执行的任务。您可以创建一个应用程序,该应用程序基本上只创建该目录并修改安全性 - 只不过是从安装程序调用的安全机制。 – 2010-04-12 12:56:54

0

我有一个类似的问题。

由于您还需要在其他环境中执行此操作,我为您提供了一个建议。

使用外部安装程序来安装您的应用程序。它有很多好处,其中之一就是它将在安装过程中为您配置File \ Directory \ Registry权限。当然,你将不得不在管理帐户上运行安装,但是你的用户将拥有应用程序所需的权限。

我可以推荐你一个很大的安装程序被称为Inno Setup

0

很可能你创建你的ini文件到应用程序文件夹中,不是吗?你应该避免这种做法。而是将ini文件创建到users \ YourUser \ AppData \ Roaming \ YourProduct。

+0

这个问题清楚地表明这是关于AllUsers \ ApplicationData \ MyProduct目录。漫游配置文件与系统全局数据文件无关。 – mghie 2010-04-12 21:26:44

3

“如何做到这一点”的正确答案是“根本不要这样做”。

如果将“允许写任何人”为您myProduct的文件夹或ini文件 - 这将是违反安全。因为现在任何用户都可以影响其他用户 - 这不是他们应该允许的。

任何用户必须只能影响他的世界。他不应该影响其他用户的世界。这个权力是为管理员保留的。

为什么这样不好? Obsiosly

这就是为什么正确的方式是约。像这样:

  1. 您的应用程序的安装程序可以将一个ini文件放到AllUsers文件夹中,但不要改变文件的权限。这个文件将是默认的只读选项。
  2. 您的应用程序应从AllUsers文件夹和当前用户文件夹中读取设置。如果需要保存设置 - 它应该写入用户文件夹,而不是AllUsers。这样,每个用户都将拥有自己的偏好/设置。
  3. 如果您希望“有人能力”应该有能力强制所有用户的设置 - 他应该是一个管理员。他可以在AllUsers中编辑文件,从而影响所有用户的设置。

请注意,您还需要决定哪些设置具有更高的优先级(全局或本地)。因此,您可以同时拥有:(a)每个用户的本地设置和(b)强制/覆盖用户设置的能力。

+0

如果你仍然决定移动到“地狱之路” - 我建议使用JEDI/JWSCL方法(请参阅SimaWB的回答)。 – Alex 2010-04-12 09:08:26