Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为“我的程序”文件夹的所有用户设置写入权限_C#_.net_Permissions_Windows Xp_Setup Project - Fatal编程技术网

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

C# 为“我的程序”文件夹的所有用户设置写入权限,c#,.net,permissions,windows-xp,setup-project,C#,.net,Permissions,Windows Xp,Setup Project,我已经在Visual Studio中构建了一个程序。程序创建一个日志文件,并在程序运行时写入其中。因此,我构建了一个安装程序(安装项目),它应该为我的程序文件夹设置写权限,而不管哪个用户使用该程序。 现在看起来是这样的: // ... } InitializeComponent(); string folder = Directory.GetCurrentDirectory(); DirectorySecurity ds = Directory.GetAccessControl(

我已经在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));
}
// ...
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)
在最后两行中,我得到了一个
System.SystemException
:“我是一个来自大教堂的牧师和一个来自大教堂的牧师。”

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

stacktrace的内容如下:

// ...
}
  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));
}
// ...
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)
你知道我能做什么吗?
谢谢

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

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

这应该为您指明了正确的方向。基本上,您不希望任何用户写入
程序文件
文件夹。UAC、安全和其他措施都是为了尽可能地防止这种情况发生


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

您是否缺少将访问控制设置回目录的语句

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

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