【问题标题】:Set write permissions for all users for my program folder为我的程序文件夹的所有用户设置写权限
【发布时间】:2010-10-13 08:53:26
【问题描述】:

我在 Visual Studio 中构建了一个程序。该程序创建一个日志文件并在程序运行时写入其中。因此,我构建了一个安装程序(设置项目),它应该为我的程序文件夹设置写权限,无论哪个用户使用该程序。 目前它看起来像这样:

// ...
}
  InitializeComponent();

  string folder = Directory.GetCurrentDirectory();

  DirectorySecurity ds = Directory.GetAccessControl(folder);
  ds.AddAccessRule(new FileSystemAccessRule("Everyone",   //Everyone is important
                                                  //because rights for all users!
   FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow));
}
// ...

在最后两行我得到一个System.SystemException:“Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Domäne konnte nicht hergestellt werden。”

[翻译:“主域和可信域之间的信任关系无法建立。”]

堆栈跟踪如下所示:

bei System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
bei System.Security.Principal.NTAccount.Translate(Type targetType)
bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
bei System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule)

你知道我能做什么吗? 谢谢

【问题讨论】:

  • 您是否使用管理权限执行安装程序?
  • 请注意,给定系统上的各种公用文件夹用于存储程序数据是有原因的...
  • 哦,我认为使用管理权限执行安装程序是默认设置。我在哪里可以找到这个?在我的设置项目的属性中我找不到这个。
  • 现在我检查了我的管理员帐户中的代码,我又得到了这个异常。该程序应由具有管理员权限的用户安装。如何在没有出现此异常的情况下设置写权限?

标签: c# .net permissions windows-xp setup-project


【解决方案1】:

也许最好的答案不是你想要的。不写入程序文件目录是有充分理由的。尤其是日志数据是暂时的,不应该写在这里。

最好将日志数据写入 TEMP 环境变量指定的目录。如果您这样做,您将为您的用户省去一些麻烦,并防止他们将来诅咒您的软件。请查看涵盖相同主题的答案:

Allow access permission to write in Program Files of Windows 7

【讨论】:

    【解决方案2】:

    您是不是错过了将访问控制实际设置回目录的语句?

    Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds);
    

    【讨论】:

      【解决方案3】:

      这个previously asked question 应该为您指明正确的方向。基本上,您确实希望任何用户写入Program Files 文件夹。 UAC、安全和其他措施可以尽可能地防止这种情况发生。

      本质上,如果您想要一个所有用户都可以写入的单个文件,您将希望它位于ProgramData 文件夹中,可通过%ALLUSERSPROFILE% 访问,而不是单个用户的临时文件夹,这绝对是你想用日志文件做什么。请记住,临时文件夹的内容应被视为易失性,并且可以随时删除,例如通过磁盘清理向导删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-13
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 2011-02-15
        • 2017-02-04
        相关资源
        最近更新 更多