我有这个代码写入Application.CommonAppDataPath:
using (var fs = new FileStream(fileName, FileMode.Create))
{
..................
}
这样,我收到了拒绝访问的异常。它发生了什么?
答案 0 :(得分:0)
问题是由于创建文件的用户的权限。首先,在以管理员身份运行应用程序时,该文件是在安装时创建的。然后,应用程序作为普通用户运行。此外,我还需要在系统中的所有用户之间共享创建的文件。
为了解决所有问题,我添加了这个辅助函数,它在创建文件后被调用:
public static bool GrantAccess(string fullPath, bool readOnly)
{
DirectoryInfo dInfo = new DirectoryInfo(fullPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), readOnly ? FileSystemRights.Read : FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
return true;
}