【问题标题】:Path for storing the 'per machine' application details存储“每台机器”应用程序详细信息的路径
【发布时间】:2011-09-27 21:55:40
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: .net path clickonce application-data


    【解决方案1】:

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

    【讨论】:

    • 不,不会的,我想存储一个xml文件。
    【解决方案2】:

    我建议你研究File.SetAccessControl() 方法和FileSecurity 类。特别是,FileSecurity documentation 提供了修改给定文件的文件访问控制列表(权限集)的完整示例。这是该示例的简化版本,它授予每个人对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!");
        }
    }
    

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

    【讨论】:

    • 我已经尝试过了,但问题是只有文件的所有者才能更改文件的访问权限。因此,我计划在首次创建用户组“Everyone”后立即更改其写入权限。总之谢谢你的回答!
    • 等等,所以您需要文件所有者以外的其他人来更改其权限?!我希望您明白为什么只有受信任的用户(例如管理员!)通常才拥有该权利...
    【解决方案3】:

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

    您可以创建一个执行所需操作的小型 exe 文件,并让 clickonce 应用程序调用它并让它提升权限。这是您唯一的选择。

    【讨论】:

    • 我已经通过在第一次创建文件时授予每个人写权限来修复它。现在其他用户可以修改文件:)
    • 那么你是手动创建文件吗?或者您是从 ClickOnce 应用程序执行此操作,如果是,如何执行?
    • 但是你是怎么给每个人写权限的呢?你是通过编程还是手动完成的?
    • 在 ClickOnce 应用程序中?它允许您创建文件夹并在创建时向每个人授予写入权限?我经常收到这个问题,所以如果你能这样工作就太好了,我可以向其他人推荐相同的解决方案。
    • 这对你有帮助我认为stackoverflow.com/questions/6533433/…
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多