我在asp.net,C#,。net FrameWork 4.0 我的webhost中的下载文件夹中有一个文件,我现在无法将其删除!我可以删除任何其他文件,但只有这一个和一个或两个以上的文件有这样的问题。
我不知道原因......但我认为文件安全性存在问题。 当我尝试用这种方式删除文件时:
FileInfo fi = new FileInfo("file.dat");
if (fi.Exists) fi.Delete();
文件名和路径正确且路径中可用。 所以fi.Exists返回true然后fi.Delete执行... 但是引发了这个错误"访问路径......被拒绝了!"
我认为我的应用的权限有限,无法删除该文件。 所以我决定为这个文件设置一个FullControl权限:
FileInfo fi = new FileInfo("file.dat");
FileSecurity sec = fi.GetAccessControl();
sec.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
fi.SetAccessControl(sec);
但现在,引发此错误:尝试执行未经授权的操作
问题出在哪里...... ??? 如何让我的应用程序删除所有文件没有问题...... ??? 请尽快帮助我...... 感谢名单...
答案 0 :(得分:1)
在运行任何代码之前,您需要更改文件的权限,以确保IIS Usr或所有用户都有权访问。请记住,您的ASP.NET应用程序正在应用程序池的上下文中运行。在另一个上下文中运行的唯一方法是打开模拟。这可能是文件是在运行IIS的本地帐户下的不同服务器(负载平衡)上创建的,现在由于权限不同而无法删除它。如果您在应用程序池(服务帐户等)中的特定上下文中运行,那么您不应该遇到这些问题。
有关假冒的更多信息,请访问此链接(https://msdn.microsoft.com/en-us/library/xh507fc5(v=vs.100).aspx)。
使用模拟时,ASP.NET应用程序可以使用发出请求的用户的Windows身份(用户帐户)执行。模拟通常用于依赖Microsoft Internet信息服务(IIS)对用户进行身份验证的应用程序。 默认情况下禁用ASP.NET模拟。如果为ASP.NET应用程序启用了模拟,则该应用程序将在其访问令牌IIS传递给ASP.NET的标识的上下文中运行。该令牌可以是经过身份验证的用户令牌,例如登录Windows用户的令牌,也可以是IIS为匿名用户提供的令牌(通常是IUSR_MACHINENAME标识)。 启用模拟后,只有您的应用程序代码在模拟用户的上下文中运行。编译应用程序并使用ASP.NET进程的标识加载配置信息。有关更多信息,请参阅配置ASP.NET进程标识。已编译的应用程序放在Temporary ASP.NET files目录中。正在模拟的应用程序标识需要具有对此目录的读/写访问权限。模拟的应用程序标识还至少需要对应用程序目录和子目录中的文件进行读取访问。有关更多信息,请参阅ASP.NET必需的访问控制列表(ACL)。
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>