2015-09-06 65 views
0

我在asp.net,C#,.net FrameWork 4.0 我在我的webhost的下载文件夹中有一个文件,我无法删除它现在!我可以删除任何其他文件,但只有这一个,一个或两个文件有这样的问题。尝试删除文件表单服务器时尝试执行未经授权的操作错误

我不知道原因......但我认为文件安全性存在问题。 当我学尝试删除与这样的文件:

FileInfo fi = new FileInfo("file.dat"); 
if (fi.Exists) fi.Delete(); 

的文件名和路径是在路径正确可用。 so 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); 

但现在,将引发此错误:试图执行未经授权的操作

问题出在哪里?... ? 我如何让我的应用程序删除所有文件没有问题...? 请尽快帮我... Thanx ...

+0

看来你的应用程序没有改变文件的安全许可的必要的权利,你不能做任何事情,形成你的代码,我建议您在IIS或联系支持的应用程序的权限。 –

+0

如何检查我的区域设置IIS中的应用程序权限? – dph

+0

请注意,如果您尝试添加'CryptoKeyAccessRule',也会发生同样的情况。 – vapcguy

回答

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文件目录中。正在模拟的应用程序标识需要具有对此目录的读/写访问权限。模拟的应用程序标识还需要至少读取应用程序目录和子目录中的文件。有关更多信息,请参阅ASP.NET必需的访问控制列表(ACL)。

<configuration> 
    <system.web> 
    <identity impersonate="true"/> 
    </system.web> 
</configuration> 
+0

我如何设置这些设置,你是指......?我的意思是在我的语言环境IIS中,我已将网站应用程序池设置为.Net4.5!现在我该怎么做才能解决我的问题......?在我的IIS中有一些设置,我必须设置主题? – dph

+0

您试图访问的文件共享在哪里?我在上面提供了更多关于模拟的信息。 –

+0

您的网站正在使用的帐户位于您的网站正在使用的应用程序池的应用程序池高级设置中。这是“身份”属性。如果您不想使用内置帐户,则必须指定一个帐户并授予其执行操作的权限,否则,如果您的网站的用户拥有这些权限,则必须添加将上面的代码块设置为您的web.config并启用ASP.NET模拟,可在您的网站> IIS部分>认证中找到。选择它,然后选择启用。 – vapcguy

相关问题