如何判断哪些进程在Windows中使用Java下的文件?

时间:2012-06-19 16:03:27

标签: java windows file process

我们有一个用Java编写的计划任务在Windows平台上失败,因为有时它需要删除的文件仍在使用中。从Java中可以看出哪些进程正在使用文件并获取有关它们的信息?

我想我会补充一点,如果有必要,我愿意使用JNA或JNI,我认为它会是。

4 个答案:

答案 0 :(得分:2)

您可以使用优秀的Sysinternals Process Explorer来执行此操作,并且不仅限于Java进程。

有关详细信息,请参阅this posting。但是,我不知道如何从java调用此功能。

答案 1 :(得分:2)

我在Github上为JNA项目提出了类似的问题, @matthiasblaesing 编写了一个代码来完成此任务。

代码为here

它以以下格式打印包含所有正在运行的进程的列表:<exe>: <type>: <path>

答案 2 :(得分:1)

执行此操作的一种肮脏方法是使用管理权限运行应用程序,并使用Handle调用ProcessBuilder等命令实用程序。

答案 3 :(得分:0)

我自己的初步答案(拜托,有人做得更好!):

理想情况下,我想学习如何以编程方式执行Process Explorer,unlocker,handler等工具,然后使用JNA或类似工具从Java调用它。但看起来这涉及到每个Windows版本都会发生变化的数据结构,因此听起来非常脆弱。涉及的系统调用似乎名为NtQuerySystemInformation。

在我们正在处理的情况下,Windows Vista的首选方法是使用“重启管理器API”,它会触发系统重启,清除所有打开的文件句柄。 (来源:http://social.msdn.microsoft.com/Forums/sv/netfxbcl/thread/37dc9843-2583-41fc-8260-b78183aa4bed)如果我们可以提供帮助,我们当然不希望这样做。