Название: Удаление загруженных динамических библиотек с помощью 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 Видимо у вас что то действительно с политиками и самое виндой. Лично я бы воспринял "воскрешение" файла как прямой вызов к поединку с ОС :)
|