[英]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.