当asp.net站点模拟用户时,为什么System.IO.Directory.Delete(string,bool)仅将文件夹标记为已删除
我的当asp.net站点模拟用户时,为什么System.IO.Directory.Delete(string,bool)仅将文件夹标记为已删除,.net,iis-7.5,windows-10,delete-file,impersonation,.net,Iis 7.5,Windows 10,Delete File,Impersonation,我的asp.net 4.0应用程序中有一个奇怪的行为,因为我已经更新到Windows10(我想它是10附带的) 我有一个应用程序,它在IIS中使用基本身份验证——在我的登录.aspx中,我正在根据定义的AD域手动验证用户和密码。 如果凭据有效,我将在会话中存储一个简单对象和一些用户数据&重定向到主页 到目前为止还不错-使用该应用程序,用户可以删除文件和目录。这些操作总是在当前用户的模拟上下文下执行 进入“模拟上下文”:(仅限主要部分) 如果用户删除目录: Public void Delete(s
asp.net 4.0应用程序中有一个奇怪的行为,因为我已经更新到Windows10(我想它是10附带的)
我有一个应用程序,它在IIS中使用基本身份验证
——在我的登录.aspx
中,我正在根据定义的AD域手动验证用户
和密码
。
如果凭据有效,我将在会话中存储一个简单对象和一些用户数据&重定向到主页
到目前为止还不错-使用该应用程序,用户可以删除文件和目录。这些操作总是在当前用户的模拟上下文下执行
进入“模拟上下文”:(仅限主要部分)
如果用户删除目录:
Public void Delete(string directory)
{
//1. Entering impersonation context before (context.Enter();)
//2. Delete the file (executing this basic .net method):
System.IO.Directory.Delete(directory, true);
//3. Leaving the impersonation context after (context.Leave() -> .Undo();)
}
在操作之后,我仍然可以在资源管理器中以管理员身份查看目录(之前已关闭)。但是如果我想打开文件夹,我会收到一条拒绝访问
消息。我也无法
查看目录的权限,或者无法成为此“重影文件夹”的所有者。快速的文件系统检查也没有帮助
但是:如果应用程序池结束
-文件夹将消失
Applicationpool是一个Classic.net 4.0
池,具有网络标识
(此时更改此设置并没有解决问题)
有人知道为什么不立即删除它们吗?
&我怎样才能强迫它呢?至少我发现了问题所在。
问题是,在某些情况下,我调用了模拟
两次或更多次
。
所以我已经处于模拟状态,并再次调用模拟代码。。。
在Windows 10之前,这不是一个问题,但在Windows 10之后,这似乎是一个问题。至少我发现了这个问题。
问题是,在某些情况下,我调用了模拟
两次或更多次
。
所以我已经处于模拟状态,并再次调用模拟代码。。。
这在Windows 10之前不是问题,但在Windows 10之后似乎是
Public void Delete(string directory)
{
//1. Entering impersonation context before (context.Enter();)
//2. Delete the file (executing this basic .net method):
System.IO.Directory.Delete(directory, true);
//3. Leaving the impersonation context after (context.Leave() -> .Undo();)
}