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

6

我在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)

你有什么想法可以做吗?谢谢。

4
你是否使用管理员权限运行了你的安装程序? - Dennis
3
请注意,给定系统上存在各种公共文件夹来存储程序数据是有原因的。 - NotMe
哦,我以为使用管理员权限来执行安装程序是默认设置。我在哪里可以找到这个设置呢?在我的设置项目属性中,我找不到这个选项。 - Rotaney
现在我在我的管理员账户中检查了代码,仍然出现了这个异常。该程序应由具有管理权限的用户安装。如何设置写入权限而不出现此异常? - Rotaney
3个回答

3
您是否忘记了实际将访问控制恢复到目录的语句?
Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds);

3
也许最好的答案不是你所要求的。不将数据写入程序文件目录有很好的理由,尤其是日志数据,它应该被视为短暂的,不应该写在这里。
更好的做法是将日志数据写入由TEMP环境变量指定的目录。如果你这样做,你将为用户节省一些麻烦,避免他们在未来咒骂你的软件。请查看这个涵盖相同主题的答案:在Windows 7的Program Files中允许访问权限以写入

0

这个之前提出的问题应该能指引你朝正确的方向。基本上,你不希望任何用户写入Program Files文件夹。UAC、安全性和其他措施都是为了尽可能地防止这种情况发生。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接