|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - [решено] Определить открыт ли файл, и если да то каким процессом... |
|
Теория - [решено] Определить открыт ли файл, и если да то каким процессом...
|
Старожил Сообщения: 301 |
Профиль | Отправить PM | Цитировать Всем доброго времени суток...
Долго бился головой об стенку, малую часть из моих "потуг" можно посмотреть здесь Результат все такой-же нулевой, то что Java на *.nix делает 6-ю строками... в Windows судя по всему целая эпопея. Устал от "танцев с бубном" хочу учиться... а для этого желаю понять все таки - руководствуясь какой логикой необходимо мою проблему решать, а уже потом искать ее реализацию в каком-либо языке/технологии (Vb.net желательно конечно, но нет так нет) Хочу понять как в Windows процессы используют файлы, и как можно получить подобного рода сведения... т.е что необходимо знать о файле или процессе, или и о том и о другом, чтобы получить связку "процесс использует файл" "ресурсы процесса" - что это, с чем его едят "дескрипторы" аналогично... почему 7-zip пишет "Заблокирован" а Unlocker или Handle.exe ничего не чуют на одном и том-же файле. ID/PID/Handle, LDT, GDT, я запутался... WMI - вообще привело к преждевременной седине, добрался аш, до CIM_DataFile.InUseCount на который было столько надежд - и ничего опять не выходит. Дайте пинка в нужном направлении... На любом языке пример кода... Я прям не верю, что никак нельзя вооружившись определенными привелегиями - спросить систему "Используется ли вот этот файл, и если да, то кем?" |
|
------- Отправлено: 19:22, 18-01-2011 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать RUVATA если с файла нужно просто извлечь информацию не обязательно ведь устанавливать кем он открыт http://www.wasm.ru/article.php?article=lockfileswork
Методы могут не работать на Висте и выше. |
Отправлено: 22:47, 18-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
вот в лично моем случае, необходимо произвести изменения файла, перед которыми по всей логике необходимо сделать "бэкап" архив, или копию, но ни то ни другое не получится если файл занят... тогда надо понять кем\чем занят... Да и не суть, моя проблема банальный вопрос как? как в Windows программно определить занят ли и кем занят процесс... ? Кто ни будь может мне логически объяснить что мне для этого надо... хотя бы логику... |
|
------- Отправлено: 12:04, 19-01-2011 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать RUVATA, я бы начал тогда изучать как Explorer детектить данный вопрос http://paulkravchenko.wordpress.com/...а-file-in-use/
А в помощники бы взял ApiMonitor дабы выяснить, как именно детектится. Возможно для ХР и Висты кое-что придется дописывать, так как каким процессом занят файл сообщает только Севен. Ещё стоит обратить внимание на Foxit Reader он репортирует систему (даже ХР) об открытых своих файлах. Ещё как вариант http://paulkravchenko.wordpress.com/...-ресурсов-для/ может его удастся задействовать программно (но опять не во всех ОС). |
Отправлено: 19:33, 19-01-2011 | #4 |
Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать Admiral,
Разрешите вопрос: vb.NET располагает такой функцией как DublicateHandle а именно описание этой функции выглядит следующим образом: 'The DuplicateHandle function creates a duplicate handle. The returned duplicate is in the caller's process space. ' Т.е. Функция DuplicateHandle копирует "ресурсы" процесса, таблицу его дескрипторов... И теперь располагая копией стало быть можно просмотреть эти самые ресурсы... но че-то не у класса Handle, не у Process который тоже можно Dublicate я не могу найти подходящих свойств или методов... может кто подскажет ? или я вообще не в том направлении пошел |
|
------- Отправлено: 09:16, 20-01-2011 | #5 |
Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать А ларчик-то очень просто открывался...
Вопрос поднимался на нескольких форумах посвященных программированию и администрированию, и никто ни где так и не дал правильного ответа на вопрос "Как определить Используется ли вот этот файл, и если да, то кем?" а вот вам и ответ... и не надо блукать вокруг Windows API, копировать Handles, и иными способами извращаться... так как Microsoft предусмотрительно начиная с версий NT, в составе системных утилит предоставляет нам openfiles.exe которая банально уже из самого названия понятно, предназначена для предоставления информации об OPENFILES Данная утилита определяет привилегии запустившего ее пользователя, достаточные или нет для получения такой информации. и по запросу с аргументом \Query (по умолчанию, можно аргумент опустить) выдает нам все что мы так жаждали увидеть. В изначальном состоянии данная утилита находится в режиме отображения информации исключительно об открытых по сети файлов... но изменив значения флага \Local отвечающего за "построение списка объектов" ... ... и изменить его используя аргумент /Local on параметры вступят в силу после перезагрузки системы... вуаля! ... обращаемся к openfiles.exe.. и с ее StandartOutput снимаем таблицу следующего содержания |
------- Последний раз редактировалось RUVATA, 21-01-2011 в 12:09. Отправлено: 10:50, 20-01-2011 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата RUVATA:
|
|
Отправлено: 11:46, 20-01-2011 | #7 |
Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать Цитата Iska:
действительно openfiles.exe входит в список утилит которые появляются только в NT, приношу извинения... ... по моему я це вычитал на sysadmins.ru попробую отыскать пост. |
|
------- Отправлено: 12:09, 21-01-2011 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата RUVATA:
Во всех версиях NT таких утилит нет. Лишь в «Microsoft Windows 2000 Resource Kit» появляется техническая утилита «Oh.exe: Open Handles» с близким функционалом: Цитата:
|
||
Отправлено: 05:35, 10-02-2011 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
.NET - Как определить что файл уже открыт, и если да, то кем? | RUVATA | Программирование и базы данных | 0 | 14-01-2011 11:10 | |
Разное - [решено] Система говорит, что файл используется. Как узнать каким процессом? | Warwar | Microsoft Windows 2000/XP | 12 | 30-12-2010 11:01 | |
Разное - Файл открыт в Windows Live quicktime host control | rovshanst | Microsoft Windows 7 | 6 | 14-10-2010 21:56 | |
[решено] Каким образом ввести данные в поле если не известно ID, CLASS элемента куда вводить? | HORRIBLE | AutoIt | 3 | 13-05-2010 19:34 | |
Интернет - [решено] Как определить к каким узлам обращается программа | A1exeyC | Хочу все знать | 2 | 05-03-2008 19:30 |
|