繁体   English   中英

将文件复制到IIS中的Web应用程序文件夹会导致文件权限问题

[英]Copying files to web application folder in IIS causes file permission issues

由于无法编辑通过Web应用程序访问的许多文档,因此在迁移到新的IIS服务器时遇到了问题。 这包括诸如我们用于设置的XML文件之类的东西。

当我们尝试使用新版本覆盖现有文件(从旧IIS服务器复制的文件)时,例如新的settings.xml文件,我们将获得拒绝权限。 我们有很多事情可以赋予应用程序池覆盖文件的权限,但还没有成功。 这包括授予NETWORK SERVICE用户帐户对文件以及文件夹的完全控制权。

但是,如果我们删除这些文件并从头开始重新生成它们,此问题将消失。 例如,可以手动删除settings.xml文件,然后该应用可以使用默认值重新生成一个文件。 这很好。

基本上,问题在于,如果我们将文件自己复制到文件夹中,则网络应用会抛出一个

“拒绝访问路径[..FILENAME ..]”

但是,我们会删除该文件,并允许网络应用自行生成文件,然后它就可以完全访问该文件,并且可以覆盖/写入文件而不会出现问题。

虽然显然可以逐个文件地处理该过程,但我们正在寻找一种更具可持续性的解决方案,以便将来不再需要删除/重新生成文件。

这里有一些尝试的方法。 一个编辑文件安全性以删除所有“拒绝”访问权限并为您的应用授予完全权限,另一个编辑者删除文件上的所有“只读”设置并将属性设置为“普通”(我必须使用此设置)过去的一个):

protected void Page_Load(object sender, EventArgs e)
{
    string path = Server.MapPath("theFileLocation");
    RemoveFileSecurity(path, @"App Pool Identity", FileSystemRights.FullControl, AccessControlType.Deny);
    AddFileSecurity(path, @"App Pool Identity", FileSystemRights.FullControl, AccessControlType.Allow);

    FileAttributes a = File.GetAttributes(path);
    a = RemoveAttribute(a, FileAttributes.ReadOnly);
    File.SetAttributes(path, FileAttributes.Normal);
}

private FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
{
    return attributes & ~attributesToRemove;
}


private void AddFileSecurity(string fileName, string account, FileSystemRights rights, AccessControlType controlType)
{
    FileSecurity fSecurity = File.GetAccessControl(fileName);
    fSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));
    File.SetAccessControl(fileName, fSecurity);
}

private void RemoveFileSecurity(string fileName, string account, FileSystemRights rights, AccessControlType controlType)
{
    FileSecurity fSecurity = File.GetAccessControl(fileName);
    fSecurity.RemoveAccessRule(new FileSystemAccessRule(account, rights, controlType));
    File.SetAccessControl(fileName, fSecurity);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM