我在 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 表示我的防病毒软件(卡巴斯基)仍然以某种方式处于活动状态,尽管已从其自己的 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.exe 之前强制终止安装程序,然后在安全模式下重新启动并在那里运行它,解决了 Steam 的特定问题。因此,显然锁定可执行文件的内容在安全模式下不存在。
虽然我已经解决了这个特殊情况,但问题也出现在其他地方,所以我仍然想了解发生了什么。
答案1
请执行下列操作:
禁用有问题的位置的索引。
启用“应用程序体验”服务并将其设置为“自动”。
这就对了。
如果问题仍然存在,则可能是 Superfetch 的问题,尽管禁用它并没有给我带来任何好处。
答案2
KLIF 是 Kaspersky AV 驱动程序。很可能与它有关。
在这种情况下,我的做法是联系卡巴斯基并寻求建议。
但是,您可以先尝试另一件事:HKLM\SYSTEM\CurrentControlSet\Services
通过查找KLIF
或类似键名的内容并将REG_DWORD
名为的值设置Start
为4
(表示已禁用)来禁用驱动程序(在 下),然后重新启动。这应该可以防止加载 KAV 过滤驱动程序。然后您可以使用fltmc
来验证结果。
您提供的 GMER 输出与当前情况无关,因为它只会影响网络连接,而不会影响文件操作。似乎您安装了类似 Kaspersky Internet Security 的程序(或仍将其放在您的机器上)。
编辑:仅供参考,luafv
它负责与 UAC 一起进行 FS 虚拟化。即,如果您无权访问某个文件,它将被放入您的配置文件内的单独文件夹中。FileInfo
属于 SuperFetch - 这实际上可能是您遇到的问题的一部分,但我自己在 Windows 7 上没有遇到过类似的问题。一般不建议禁用 SuperFetch,尽管可以。
答案3
这种情况发生在我身上一次,结果是远程计算机打开了共享文件夹。
- 使用处理找出哪个进程持有该文件
- (就我的情况而言是系统)
- 尝试关闭句柄:
handle.exe -c E14 -p 4
。您的文件句柄将在搜索文件句柄的输出中找到,并且系统的进程 ID 可能相同。 - 它输出
Error closing handle: T
- 谷歌搜索后,我发现这与网络有关
- 我在另一台机器上发现,我确实打开了该文件夹。关闭它。一切正常。
答案4
我在尝试重命名文件夹时遇到了这个问题。我必须在执行重命名时停止服务器服务。重新启动并没有帮助,因为系统进程在服务器服务重新启动后立即重新锁定了文件夹。这可能会解决提到的问题这里也一样。