2010-10-13 108 views
6

我在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:“死Vertrauensstellung zwischen德primärenDomäneund明镜vertrauenswürdigenDomänekonnte 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) 

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

+4

您是否使用管理员权限执行安装程序? – Dennis 2010-10-13 08:55:27

+3

请注意,给定系统上的各种公用文件夹存储程序数据是有原因的...... – NotMe 2010-10-13 09:03:49

+0

哦,我认为使用管理员权限执行安装程序是默认设置。我在哪里可以找到这个?在我的设置项目的属性中,我找不到这个。 – Rotaney 2010-10-13 09:25:02

回答

3

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

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

Allow access permission to write in Program Files of Windows 7

0

previously asked question应该指向你在正确的方向。基本上,你做不是想要任何用户写入Program Files文件夹。 UAC,安全和其他措施尽可能地尝试和防止这种情况。基本上,如果你想要一个文件将被所有用户写入,你会希望它在ProgramData文件夹中,可以通过%ALLUSERSPROFILE%访问,而不是个人用户的临时文件夹,这绝对是你想要的处理日志文件。请记住,临时文件夹的内容应该被认为是易失性的,并且可以随时删除,例如通过“磁盘清理向导”。

3

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

Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds); 
相关问题