Вопрос по windows, file, java, process – Как я могу сказать, какие процессы используют файл под Java в Windows?

10

У нас есть запланированное задание, написанное на Java, которое не выполняется на платформах Windows, потому что иногда файлы, которые нужно удалить, все еще используются. Есть ли способ изнутри Java, чтобы я мог видеть, какие процессы используют файл и получать информацию о них?

Я думал, что добавлю, что я хочу использовать JNA или JNI, если это необходимо, и я предполагаю, что так и будет.

Не уверен, сможете ли вы сделать это, не становясь зависимыми от ОС, что ограничит переносимость вашего приложения. cklab
Да, это будет решение только для Windows, но это проблема только для Windows. Эта же автоматическая задача уже отлично работает на сотнях серверов Linux. Если мы это выясним, мы не будем выполнять код для этого решения в Linux. skiphoppy

Ваш Ответ

4   ответа
2

@matthiasblaesing написал код для достижения этой цели.

Кодhere.

Распечатывает список всех запущенных процессов в формате:<exe>: <type>: <path>.

1

администратора и вызвать утилиту командной строки, такую какСправиться используяProcessBuilder.

Это может быть лучше, так как Handle и подобные утилиты, вероятно, инкапсулируют всю сложную работу по работе с различными версиями Windows. skiphoppy
2

Sysinternals Process Explorer чтобы сделать это, и это не ограничивается процессами Java.

Увидетьэта публикация для деталей. Однако я не знаю, как вызвать эту функцию из Java.

У вас есть информация о лицензии? Это с открытым исходным кодом?
У нас есть проводник процессов, но мне нужен способ сделать это программно. skiphoppy
0

кто-нибудь, сделайте лучше!):

В идеале я хотел бы узнать, как программно делать то, что делают такие инструменты, как Process Explorer, unlocker, обработчик и т. Д., А затем вызывать это из Java с помощью JNA или аналогичного. Но, похоже, это связано со структурами данных, которые меняются в каждом выпуске Windows, поэтому звучит очень хрупко. Похоже, системный вызов называется NtQuerySystemInformation.

Похоже, что в тех случаях, когда мы имеем дело, предпочтительным подходом для Windows Vista является использование & quot; API-интерфейса менеджера перезапуска & quot; который запускает перезагрузку системы, очищая все открытые файловые дескрипторы. (источник:http://social.msdn.microsoft.com/Forums/sv/netfxbcl/thread/37dc9843-2583-41fc-8260-b78183aa4bedМы уверены, что не хотим этого делать, если сможем помочь.

Благодарю. Я, вероятно, недоразумение, и я буду перечитывать его. skiphoppy
Назначение менеджера перезапуска состоит вavoid перезапуск, а не запускать один.

Похожие вопросы