1

我的应用程序需要将一些信息写入文件并保持机器通用(所有用户通用)。

目前我将它存储在C:\Documents and Settings\All Users\Application Data

但问题是每当管理员创建文件时,所有其他用户都没有写入权限。

但是我想要所有用户对该文件的写权限,以便所有用户都可以修改其中的数据。任何人都可以帮助我吗?

编辑:我想要一个存储所有用户通用的 xml 文件。

谢谢

4

3 回答 3

0

我建议你研究File.SetAccessControl()方法和FileSecurity课程。特别是,该FileSecurity文档提供了修改给定文件的文件访问控制列表(权限集)的完整示例。这是该示例的简化版本,它授予每个人对以下内容的读写权限C:\TEMP\junk.txt

using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;

class WorldWrite
{
    static void Main()
    {
        string filename = @"C:\TEMP\junk.txt";
        if (!File.Exists(filename)) {
            Console.WriteLine("No such file " + filename);
            return;
        }

        /* Get the previous ACL, add a rule to give everyone read
         * and write permission, and write back the resulting ACL. */
        FileSecurity fileACLs = File.GetAccessControl(filename);
        fileACLs.AddAccessRule(new FileSystemAccessRule(
            // For everyone 
            new SecurityIdentifier (
                WellKnownSidType.WorldSid, 
                null /* domain SID; ignored for Everyone */
            ),
            // Allow read and write (of data and metadata), 
            // but not delete or execute
            FileSystemRights.Read | FileSystemRights.Write,
            AccessControlType.Allow
        ));
        File.SetAccessControl(filename, fileACLs);
        Console.WriteLine("Success!");
    }
}

我还关心您如何指定共享应用程序数据目录。如果您对 name 进行硬编码C:\Documents and Settings\All Users\Application Data,那么您的代码将无法在非英语版本的 Windows、Vista 或 Windows 7 上运行。最好使用SpecialFolder枚举来找到要使用的正确目录。

于 2011-07-04T06:57:15.240 回答
0

注册表对您来说是个好地方吗?(取决于您要存储的内容)。您可以在 HKLM 配置单元上创建一个节点,供所有用户访问

于 2011-07-04T06:13:26.693 回答
0

如果您使用 ClickOnce 部署,这将很难做到,因为您必须提升权限才能读取/写入公共文件夹,而 ClickOnce 应用程序不会这样做。

您可以创建一个小的 exe 文件来执行您想要的操作,并让 clickonce 应用程序调用它并让它提升权限。那是你唯一的选择。

于 2011-07-07T23:10:32.067 回答