为我的程序文件夹的所有用户设置写入权限

时间:2010-10-13 08:53:26

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

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

// ...
}
  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 zwischenderprimärenDomäneunddervertrauenswürdigenDomänekonvertnicht hergestellt werden。”

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

stacktrace的内容如下:

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)

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

3 个答案:

答案 0 :(得分:3)

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

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

Allow access permission to write in Program Files of Windows 7

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

previously asked question应指向正确的方向。基本上,您 NOT 希望任何用户都写入Program Files文件夹。 UAC,安全和其他措施是尽可能地尝试和防止这种情况。

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