写入Application.CommonAppDataPath时出现拒绝访问错误

时间:2016-04-19 14:17:18

标签: c# winforms filestream

我有这个代码写入Application.CommonAppDataPath:

            using (var fs = new FileStream(fileName, FileMode.Create))
            {
                 ..................
            }

这样,我收到了拒绝访问的异常。它发生了什么?

1 个答案:

答案 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;
    }