代码之家  ›  专栏  ›  技术社区  ›  Fedearne

文件和目录的默认访问权限

  •  0
  • Fedearne  · 技术社区  · 15 年前

    安装程序将一些文件写入%APPDATA%文件夹中的文件夹。

    当用户(没有提升的用户权限)运行应用程序时,无法访问共享的%APPDATA%(Vista中的c:\ProgramData)中的文件(和创建的文件夹)。

    这些文件由第三方组件编写。如果在没有提升用户权限的情况下使用组件,则文件将不可访问(且可写)。

    我试图更改文件的访问权限,但这些文件是在不走运的情况下编写的。

    有没有办法让每个人都能完全控制文件的默认访问权限?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Fedearne    15 年前

    我通过创建子文件夹I c:\ProgramData解决了这个问题,方法如下所述 here

    bool modified;
    DirectoryInfo directoryInfo = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyFolder");
    DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
    FileSystemAccessRule rule = new FileSystemAccessRule(
        securityIdentifier,
        FileSystemRights.Write |
        FileSystemRights.ReadAndExecute |
        FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit |
        InheritanceFlags.ObjectInherit,
        PropagationFlags.InheritOnly,
        AccessControlType.Allow);
    directorySecurity.ModifyAccessRule(AccessControlModification.Add, rule, out modified);
    directoryInfo.SetAccessControl(directorySecurity);
    

    规则由子文件夹和文件继承。“MyFolder”中创建的所有文件和文件夹都可以写入用户组。

        2
  •  0
  •   KeithS    15 年前

    首先,您确定您的安装程序正在为所有用户而不是一个用户设置AppData吗?如果安装程序在一个用户的AppData文件夹下生成文件夹,那么一般来说,不管您在系统上拥有多少权限,除非您是该用户,否则您将无法访问该文件夹。

    其次,听起来您的安装程序是代表执行安装的用户编写文件夹和/或文件,这将是一个管理员,因此需要提升的权限。有一种方法可以获取和更改文件夹和/或文件的ACL权限。也许你尝试的一段代码不起作用可能会帮助我们。