Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - [решено] Определить открыт ли файл, и если да то каким процессом...

Ответить
Настройки темы
Теория - [решено] Определить открыт ли файл, и если да то каким процессом...

Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16


Конфигурация

Профиль | Отправить 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
Благодарности: 916

Профиль | Отправить PM | Цитировать


RUVATA если с файла нужно просто извлечь информацию не обязательно ведь устанавливать кем он открыт http://www.wasm.ru/article.php?article=lockfileswork
Методы могут не работать на Висте и выше.

Отправлено: 22:47, 18-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


Цитата Admiral:
если с файла нужно просто извлечь информацию »
А если нет...
вот в лично моем случае, необходимо произвести изменения файла, перед которыми по всей логике необходимо сделать "бэкап"
архив, или копию, но ни то ни другое не получится если файл занят... тогда надо понять кем\чем занят...

Да и не суть, моя проблема банальный вопрос как?
как в Windows программно определить занят ли и кем занят процесс... ?
Кто ни будь может мне логически объяснить что мне для этого надо...
хотя бы логику...

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 12:04, 19-01-2011 | #3


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


RUVATA, я бы начал тогда изучать как Explorer детектить данный вопрос http://paulkravchenko.wordpress.com/...а-file-in-use/
А в помощники бы взял ApiMonitor дабы выяснить, как именно детектится. Возможно для ХР и Висты кое-что придется дописывать, так как каким процессом занят файл сообщает только Севен.
Ещё стоит обратить внимание на Foxit Reader он репортирует систему (даже ХР) об открытых своих файлах.
Ещё как вариант http://paulkravchenko.wordpress.com/...-ресурсов-для/ может его удастся задействовать программно (но опять не во всех ОС).

Отправлено: 19:33, 19-01-2011 | #4


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить 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


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Openfiles1.jpg
(43.8 Kb, 32 просмотров)
Тип файла: jpg Openfiles2.jpg
(43.3 Kb, 30 просмотров)
Тип файла: jpg Openfiles3.jpg
(41.9 Kb, 30 просмотров)

А ларчик-то очень просто открывался...
Вопрос поднимался на нескольких форумах посвященных программированию и администрированию,
и никто ни где так и не дал правильного ответа на вопрос "Как определить Используется ли вот этот файл, и если да, то кем?"
а вот вам и ответ...
и не надо блукать вокруг 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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата RUVATA:
так как Microsoft предусмотрительно еще с версий 9x, в составе системных утилит предоставляет нам openfiles.exe »
Откуда такая информация?

Отправлено: 11:46, 20-01-2011 | #7


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


Цитата Iska:
Откуда такая информация? »
упс... уже исправляюсь
действительно openfiles.exe входит в список утилит которые появляются только в NT, приношу извинения...
... по моему я це вычитал на sysadmins.ru попробую отыскать пост.

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 12:09, 21-01-2011 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата RUVATA:
действительно openfiles.exe входит в список утилит которые появляются только в NT »
RUVATA, снова — откуда и эта информация?! «openfiles.exe» наличествует, начиная с Windows XP.

Во всех версиях NT таких утилит нет. Лишь в «Microsoft Windows 2000 Resource Kit» появляется техническая утилита «Oh.exe: Open Handles» с близким функционалом:
Цитата:
Код: Выделить весь код
C:\Temp>oh.exe /?
Usage: OH [-p n] [-t typeName] [-o fileName] [-a] [name]
where: -p n - displays only open handles for process with ClientId of n
       -t typeName - displays only open object names of specified type.
       -o fileName - specifies the name of the file to write the output to.
       -a includes objects with no name.
       name - displays only handles that contain the specified name.

Отправлено: 05:35, 10-02-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - [решено] Определить открыт ли файл, и если да то каким процессом...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.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




 
Переход