为什么退出应用程序后,SYSTEM会继续锁定可执行文件句柄?


24

我在Windows 7计算机上看到奇怪的行为;看起来,当可执行文件运行时,SYSTEM会在下一分钟左右将其句柄保持打开状态。这是我最近的遭遇:

我安装了Steam,它将在安装后启动steam.exe进行更新。这样做似乎是通过编写自身的临时副本,启动该副本以执行下载,然后覆盖可执行文件的原始副本来完成的。以我为例,这失败了,声称无法删除steam.exe。

我打开文件夹并尝试手动删除steam.exe,但是Windows声称我没有权限。我的帐户是管理员,并且是此计算机上的唯一用户帐户。但以防万一,我以管理员身份启动了Explorer,但仍然无法删除该文件。我将文件的“属性”调到“安全性”选项卡,但只显示一条消息,表明我无权查看权限。

接下来,我调出Process Explorer来查看文件是否有锁。SYSTEM(PID 4)可以,但是当我尝试关闭文件句柄时,它产生了一个错误,指出该句柄无效。我试图查看文件句柄属性,但是我也没有这样做的权限。

我终止了除了无法确定的系统进程之外的所有内容,并停止了我能够提供的所有服务,包括与AV和防火墙相关的所有内容,但是问题仍然存在。我曾尝试使用'takeown'来授予自己文件的所有权,但它声称我无权这样做。其他人声称使用“ Unlocker”工具已成功,但是在关闭文件句柄方面,它与Process Explorer存在相同的问题。

我很早以前就禁用了Windows索引和搜索功能,并从索引中排除了C:\,所以这个问题的答案不适用于我。

每次大约一分钟后,句柄都会消失,文件会立即删除;显然,更新程序删除文件的尝试已排队,并在文件不再锁定后最终完成。不幸的是,更新已终止,无法恢复。而且,当我重新安装时,它当然会尝试再次运行steam.exe,现在回到第一个问题。

我的问题是:为什么这些手柄在周围徘徊,如何防止它们晃动?

编辑:这是评论中要求的其他信息:

C:\>fltmc instances
Filter                Volume Name                              Altitude        Instance Name      Frame  VlStatus
--------------------  -------------------------------------  ------------  ---------------------  -----  --------
KLIF                  \Device\Mup                             320400       KLIF                     0
KLIF                  C:                                      320400       KLIF                     0
KLIF                                                          320400       KLIF                     0
luafv                 C:                                      135000       luafv                    0
FileInfo              \Device\Mup                              45000       FileInfo                 0
FileInfo              C:                                       45000       FileInfo                 0
FileInfo                                                       45000       FileInfo                 0

编辑:GMER指示我的防病毒软件(Kaspersky)仍然处于活动状态,尽管已从其自己的GUI禁用了它,并且其服务已停止。

AttachedDevice  \Driver\tdx \Device\Ip     kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Tcp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Udp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\RawIp  kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)

但是这些似乎都是为了网络服务。我没有看到与文件系统有关的任何内容。这些可能是问题的原因吗?

编辑:我禁用了卡巴斯基KLIF过滤器,但锁定问题仍然存在。

编辑:我通过安装解决Steam的特定问题,在启动Steam.exe之前强制终止安装程序,然后以安全模式重新启动并在其中运行。因此,显然在安全模式下不存在任何锁定可执行文件的内容。

尽管我已经解决了这种特殊情况,但是问题也在其他地方出现,因此我仍然想了解发生了什么。


3
“系统”是一个伪进程,代表(大致而言)Windows内核。为了确定答案,需要有关配置的更多信息(例如,用户使用了哪些筛选器驱动程序)。
0xC0000022L

获得这些额外信息的最佳方法是什么?
DNS

如果这些过滤器是小型过滤器,请尝试检查fltmc这些过滤器是否为旧式过滤器,您需要使用GMER之类的工具来列出过滤后的对象。我知道这不是GMER的主要目的,但可以通过这种方式使用。OSR也曾经有一些工具,但是我不记得它的名字了。如果我记得的话会再次答复。
0xC0000022L

这是针对反复关闭和​​重新打开文件的程序的优化。“应用程序体验”服务不利于特殊情况的优化,例如尝试在仍缓存句柄的情况下尝试从Windows资源管理器中删除。
user165568 '17

Answers:


20

请执行下列操作:

  1. 在有问题的位置上禁用索引。

  2. 启用“应用程序体验”服务并将其设置为“自动”。

这就对了。

如果您的问题仍然存在,则可能是Superfetch,尽管禁用后并没有带来好运。


5
#2(启用“应用程序体验”服务)对我有用,谢谢!调试LIVEditor(实时html编辑器)软件时,确实很痛苦,因为我不得不反复重新编译EXE。
叶振华

1
索引并不是我想要禁用的东西,幸运的是,只需将“应用程序体验”设置为“自动”即可。不能相信我在过去的5年中一直都在解决这个问题,当时修复是如此简单。
Mordred

过去的你,我爱你!

开始AeLookupSvc工作了,但是为什么呢?这是什么神秘的服务?
cdlvcdlv

6

KLIF是卡巴斯基AV驱动程序。很有可能与它有关。

在这种情况下,我的做法是与卡巴斯基联系并寻求建议。

但是,还有一件事,你可以先尝试:禁用驱动程序(下HKLM\SYSTEM\CurrentControlSet\Services)通过寻找KLIF或键名称类似的东西,并设置REG_DWORD指定值Start4(这意味着禁用),然后重启。这样可以防止加载KAV筛选器驱动程序。然后,您可以fltmc用来验证结果。

您提供的GMER输出与当前情况无关,因为它只会影响网络连接,而不影响文件操作。看来您已安装了类似Kaspersky Internet Security的设备(或仍在计算机上处​​于休眠状态)。

编辑:仅FYI luafv与UAC一起负责FS虚拟化。即,如果您无权访问文件,那么它将被放入配置文件中的单独文件夹中。FileInfo属于SuperFetch-实际上可能是您的问题的一部分,但是我自己在Windows 7上没有类似的问题。通常不建议禁用SuperFetch,尽管可以。


它不允许我更改该键的值,因此我以安全模式重新启动并在那里进行了更改。重新启动时,KLIF条目从fltmc输出中消失了,但是仍然存在锁定问题。
DNS

我添加了更多信息;请参阅我最近对该问题的编辑。
DNS

@DNS:您是否尝试过fltmc以安全模式获取输出?SuperFetch很可能没有激活。当您阅读SuperFetch时,听起来像是关于握住手柄更长一点的描述似乎是合理的。
0xC0000022L

真是个好主意,可惜FileInfo和luafv都在安全模式下处于活动状态。
DNS

这些现代的“互联网安全性”套件过于夸张,鲜有好处。MSE +常识就足够了。
kinokijuf 2014年

1

我遇到了这个问题,因为Java可执行文件一直处于打开状态,并且我禁用了应用程序体验...(也禁用了Windows搜索),将应用程序体验设置为自动启动为我修复了它。谢谢!!!(我还遇到文件无法保存一整分钟的问题,并且直到关闭文件一分钟后才能够删除文件...


您如何禁用应用程序体验?
西蒙·希恩

任何Windows服务控制点都可以-我使用开始>>运行>>“ services.msc”(输入)>>右键单击“应用程序体验” >>左键单击“属性” >>选择“常规”选项卡(默认)> >下拉“启动类型”列表框>>选择自动(左键单击)>>单击“应用”
David K

1

这一次发生在我身上,原来是一台打开了共享文件夹的远程计算机。

  1. 使用Handle找出持有文件的进程
  2. (在我的情况下是系统)
  3. 尝试关闭句柄:handle.exe -c E14 -p 4。您的文件句柄将在搜索文件句柄的输出中找到,并且processid对于系统而言可能是相同的。
  4. 输出 Error closing handle: T
  5. 谷歌搜索,我发现这与网络有关
  6. 我在另一台机器上发现,实际上确实打开了该文件夹。关闭了 都好。

0

尝试重命名文件夹时遇到此问题。执行重命名时,我必须停止服务器服务。只是重新启动并没有帮助,因为一旦服务器服务重新启动,系统进程就会重新锁定该文件夹。这也可能会解决这里提到的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.