在尝试复制某个文件时,Windows 如何知道哪个程序锁定了该文件?

在尝试复制某个文件时,Windows 如何知道哪个程序锁定了该文件?

我只是想知道为什么旧版本的 Windows 不会告诉您哪些程序正在使用某个文件,因此您无法移动它们。但新版本会告诉您某个程序正在访问该文件或该文件已在该程序中打开。

例如,当我尝试将 PDF 文件从桌面移动到其他文件夹时,Windows 8.1 窗口显示:

无法移动该文件,因为它已在 Adob​​e Reader 中打开。

现在,复制程序如何获取信息,表明 Adob​​e Reader 是对该 PDF 文件具有某种锁定的程序?

我的意思是只了解底层操作系统的详细信息,即使是针对 Windows。也欢迎回答其他操作系统的问题。(我很想知道如何在自己的 C 程序中获得此类信息。)

答案1

所有版本的 Windows 始终“知道”哪个可执行文件锁定了某个文件,它只会在尝试移动锁定的文件时向您提供任何信息。在较早版本的 Windows 中,您可以使用以下程序查看此信息文件管理器。在较新版本的 Windows 中,资源监视器可以提供该信息,但它不是一个易于使用的界面。

我假设 Windows 8 只是将可执行文件与File description可执行文件属性中的文件锁关联起来。请参见下图,这是 acrord32.exe 属性的屏幕截图。

在此处输入图片描述

答案2

自 2000 版起,所有 Windows 都允许您通过计算机管理来管理网络文件和文件夹的文件锁。如果您也是这种情况,则可以使用此方法查看和释放锁。

转到Control Panel-> Administrative Tasks-> Computer Management

在左侧,取消卷动Shared Folders然后点击Open Files

一些背景信息

当您对文件执行操作时,Windows(或任何其他操作系统)将打开文件进行读取、读写或随机访问。后两种方式要求文件被写入。因此,Windows 将启动对文件的写锁定,并在硬盘驱动器的目录上将此文件标记为“已写入”或“写锁定”。根据您使用的文件系统,是否存储有关写入文件的程序的信息。对于网络访问,这些信息不存储在文件中,而是存储在如上所述可访问的数据库中。在其他情况下,进程 ID 与锁一起存储,指示锁的来源。

当进程不再需要写入文件时,它会释放锁,并因此删除文件系统内容表中正在写入该文件的标志。

解锁工具可以随意删除此标志,但如果某个进程实际上正在写入文件,则可能会损坏文件本身。但是,有时文件被打开进行读/写或随机访问而实际上没有写入,但锁定仍保留在该文件上,以防用户执行需要在稍后阶段写入文件的操作。还可能发生这样的情况:程序在释放锁定之前崩溃,但不知何故该锁定仍然有效,因为用户除了通过服务或空闲进程(您不知道是哪一个)之外无法再访问程序的一部分。在这种情况下,解锁程序或重新启动会有所帮助。

当您不想重新启动,或者启动时启动的程序锁定了文件,而您在每次启动时都会获得锁定时,解锁工具是最有效的。(想想您想移动但无法移动的间谍软件或实用程序。请注意,如果您无法移动正在使用的实用程序,那么除非您知道自己在做什么,否则您不应该移动它。)

相关内容