Russian Qt Forum

Qt => Общие вопросы => Тема начата: Гурман от Январь 20, 2015, 20:37



Название: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Гурман от Январь 20, 2015, 20:37
Приложение запущено, загружены плагины. В само приложение встроена возможность миграции, это условие техзадания. То есть, при указании в нём каталога, куда оно должно быть перемещено, оно копирует свои плагины и пытается их удалить. Но библиотеки загружены и залочены ОС. Кто использовал что-то похожее в разных ОС? Как себя ведет конкретно QFile::remove(...) в такой ситуации в разных ОС? Только ошибку возвращает из-за залочки, или файл помечается и удаляется сразу после разлочки? Проверять все варианты сейчас нет возможности, а надо спроектировать, чтобы для других платформ не пришлось переделывать.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Old от Январь 20, 2015, 20:57
Насколько я знаю, с вендой ничего не сделать, загруженные библиотеки не удалить. Придётся завершаться  и рестартовать.
Под нормальными операционными системами открытые файлы спокойно удаляются, реально файл будет удален, когда его закроет последний пользователь.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Гурман от Январь 20, 2015, 21:16
Так в вениках и после рестарта ничего не удаляется, по крайней мере, командой del в консоли. То есть, получается, надо городить удаление перед загрузкой плагинов. То есть, для этого специально в настройках хранить старый каталог плагинов.

Или в вениках QFile::remove() умеет удалять, когда файл освобожден? Вот в чем вопрос.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Old от Январь 20, 2015, 21:20
Так в вениках и после рестарта ничего не удаляется... То есть, получается, надо городить удаление перед загрузкой плагинов.
Завершили программу использующую плагины из старого места, удалили плагины в старом месте, запустили программу из нового места и загрузили плагины из нового места.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Old от Январь 20, 2015, 21:22
Пока библиотеки плагинов загружены, они будут защищаться ядром, если их выгрузить, то remove их спокойно удалит.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Гурман от Январь 20, 2015, 21:25
Некоторые плагины невозможно выгрузить - это плагины со своими окнами, которые исторически сделаны на классе QMainWindow, они были сделаны из приложений. При их выгрузке происходит падение где-то в библиотеках ОС. Переделывать их сейчас нереально.

ЗЫ я пользуюсь в вениках файл-менеджером FreeCommander, начиная с прошлогодней версии он умеет откладывать удаление залоченных файлов.

А в новых вениках типа 7 и 8+ тоже весь этот бред сохранился?


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Old от Январь 20, 2015, 21:26
Некоторые плагины невозможно выгрузить - это плагины со своими окнами, которые исторически сделаны на классе QMainWindow. При их выгрузке происходит падение где-то в библиотеках ОС.
Остаётся завершать приложение и перезапускаться из нового расположения.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Гурман от Январь 20, 2015, 21:29
Некоторые плагины невозможно выгрузить - это плагины со своими окнами, которые исторически сделаны на классе QMainWindow. При их выгрузке происходит падение где-то в библиотеках ОС.
Остаётся завершать приложение и перезапускаться из нового расположения.

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


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Old от Январь 20, 2015, 21:32
И получается только после перезапуска тогда можно удалить, для этого надо сохранить старый каталог.
Получается так. Не скажу про восьмёрку, но вроде до семерки, точно блокировались открытые файлы.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Fregloin от Январь 22, 2015, 12:32
Это что, у меня в семерке если был открыт exe файл, то после его закрытия система не дает его удалить некоторое время.
Т.е. я его удаляю через Shift_Del, он исчезает в проводнике, далаю обновление, он опять появляется. И висит где то с пару минут, потом сам удаляется.
Если удалить в козину- требует права админа, хотя я и так в групе админ. Бывает и такое, на других машинах с семеркой файлы удаляются сразу.
Наверное что то намудрил в политиках безопасности.


Название: Re: Удаление загруженных динамических библиотек с помощью QFile::remove(...)
Отправлено: Bepec от Январь 22, 2015, 13:16
Видимо у вас что то действительно с политиками и самое виндой. Лично я бы воспринял "воскрешение" файла как прямой вызов к поединку с ОС :)