Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当asp.net站点模拟用户时,为什么System.IO.Directory.Delete(string,bool)仅将文件夹标记为已删除_.net_Iis 7.5_Windows 10_Delete File_Impersonation - Fatal编程技术网

当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();)
}