Определить владельца ресурса и безопасно его прибить

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kostyanet
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 10.06.2006 (Сб) 10:36

Определить владельца ресурса и безопасно его прибить

Сообщение kostyanet » 10.06.2006 (Сб) 10:53

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

С файлами проще - определить открыт ли где-то файл легко с помощью эмуляции ошибки доступа - и вообще логика против вмешательства в управление открытым файлом.

Но, с папками это какой-то маразм. Файлы не открыты, по сути работа закончена, а пока приложение-владелец не выпустит ее из своих лап, то ничего не сделать - а надо.

Так вот, я хотел узнать, есть ли какой безопасный способ прекратить это безобразие - прибить хэндл но безопасно. Ну да, для начала его нужно определелить.

У меня есть корявое и главное небезопасное решение, но я хотел бы узнать - может быть есть какой-то иной способ.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.06.2006 (Сб) 15:10

Для начала, попробуй просто сменить текущий каталог. Скорее всего папку не удается удалить именно из-за того, что существует активное приложение, у которого текущий каталог (ChDir) ссылается на эту папку.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2006 (Сб) 17:50

alibek
Создай папку C:\1
Создай папку C:\1\2
Скопируй папку C:\1\2
Вставь ее, получиш папку C:\1\Копия 2 или C:\1\Copy 2 или чтото типа того.
Удали папку 1.
Ну как? Какое приложение ее заняло?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 10.06.2006 (Сб) 17:53

ANDLL
У меня никакое... свободно удалилась :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2006 (Сб) 18:03

ОС?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.06.2006 (Сб) 19:38

Windows 2000, все удалилось.

ANDLL, если у тебя открыто окно проводника, то оно (естественно) тоже имеет текущую папку и может блокировать папку.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2006 (Сб) 19:46

Нет, окно я закрывал.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.06.2006 (Сб) 20:13

Значит у тебя какая-нибудь утилита запущена, которая мониторит Clipboard и именно из-за нее блокируется папка. Попробуй создать папку не копипастом, а перетаскиванием мышкой с удержанием Ctrl.
Lasciate ogni speranza, voi ch'entrate.

kostyanet
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 10.06.2006 (Сб) 10:36

Сообщение kostyanet » 10.06.2006 (Сб) 20:19

Если конкретно, то речь идет о такой прогре как CorelDraw и такой как Photoshop. Мне нужно не закрывая этих монстров управлять файлами и главным образом папками проектов. Проект закончен - папка из рабочего каталога перемещается в архив, бэкапится и все такое. Речь идет о рабочей группе, а не домашнем компе - то есть, ресурсы аккумулируются в одном месте.

Так вот, идея сменить программе текущий каталог хорошая. Но как это сделать извне?

Убить хэндл можно. Но как и ожидается происходит сбой и прогры, особенно Корел, начинают глючить. Приходится перегружать - а тогда какая разница - можно и выгрузить на время.

Эта проблема не позволяет создать прозрачный менеджмент, то есть, чтобы не пользовател мувал свое файло, а чтобы програ по сведениям взятым из базы это делала сама. Там надстройка над файловой системой есть - клиент базы данных с развитыми файловыми фитчами. Из-за падучей в результате прикрытия хэндла пришлось отказаться от этого - теперь только проверяет - заблокировано или нет.

Да, а проверяет так. С сайта sysinternals взят handle.exe - консольная програ - которая запускается через cmd.exe и по тому самому досявому "трубопроводу" возвращает таблицу - отчет, который анализируется и тем самым определяется - есть данный ресурс в ней, или нет. Если есть - заблокирован.

Так вот, было бы круто не убивать хэндл, а заменить его. Например создать такой же, но на другой ресурс, даже на реальную папку где-нибудь, и заменить.

Убиванием занималась dll'ка, которую мне знакомый написал за спасибо, я с ним контакт уже потерял, а тут наткнулся на этот форум и решил попробовать спросить.

Может есть какие-нить идеи?

Да, еще убить управление можно еще одной апликухой той же конторы - process explorer'ом. Ну, не важно - убивать нельзя, как-то надо лечить.

Честно говоря, помню, тогда наверное неделю потратил на то, чтобы убедиться в том что ответа на вопрос how to determine file handle ownership не существует. Хотя, буквально сразу налетел на справку от МС, что, типа, это вы можете узнать у сисинтерналса, ага. Но еще искал и спрашивал пока не вернулся к тому, с чего начал - к той самой конторе.

Начинал я еще в Вин95 (то есть, Миллениуме) это делать - там ничего не блокировалось и все пластилинова мувалось. А в ХР началось!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 13

    TopList  
cron