Russian Qt Forum
Ноябрь 23, 2024, 15:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление загруженных динамических библиотек с помощью QFile::remove(...)  (Прочитано 4649 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Январь 20, 2015, 20:37 »

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

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Январь 20, 2015, 20:57 »

Насколько я знаю, с вендой ничего не сделать, загруженные библиотеки не удалить. Придётся завершаться  и рестартовать.
Под нормальными операционными системами открытые файлы спокойно удаляются, реально файл будет удален, когда его закроет последний пользователь.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Январь 20, 2015, 21:16 »

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

Или в вениках QFile::remove() умеет удалять, когда файл освобожден? Вот в чем вопрос.
« Последнее редактирование: Январь 20, 2015, 21:18 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Январь 20, 2015, 21:20 »

Так в вениках и после рестарта ничего не удаляется... То есть, получается, надо городить удаление перед загрузкой плагинов.
Завершили программу использующую плагины из старого места, удалили плагины в старом месте, запустили программу из нового места и загрузили плагины из нового места.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Январь 20, 2015, 21:22 »

Пока библиотеки плагинов загружены, они будут защищаться ядром, если их выгрузить, то remove их спокойно удалит.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #5 : Январь 20, 2015, 21:25 »

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

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

А в новых вениках типа 7 и 8+ тоже весь этот бред сохранился?
« Последнее редактирование: Январь 20, 2015, 21:28 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Январь 20, 2015, 21:26 »

Некоторые плагины невозможно выгрузить - это плагины со своими окнами, которые исторически сделаны на классе QMainWindow. При их выгрузке происходит падение где-то в библиотеках ОС.
Остаётся завершать приложение и перезапускаться из нового расположения.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Январь 20, 2015, 21:29 »

Некоторые плагины невозможно выгрузить - это плагины со своими окнами, которые исторически сделаны на классе QMainWindow. При их выгрузке происходит падение где-то в библиотеках ОС.
Остаётся завершать приложение и перезапускаться из нового расположения.

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

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Январь 20, 2015, 21:32 »

И получается только после перезапуска тогда можно удалить, для этого надо сохранить старый каталог.
Получается так. Не скажу про восьмёрку, но вроде до семерки, точно блокировались открытые файлы.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #9 : Январь 22, 2015, 12:32 »

Это что, у меня в семерке если был открыт exe файл, то после его закрытия система не дает его удалить некоторое время.
Т.е. я его удаляю через Shift_Del, он исчезает в проводнике, далаю обновление, он опять появляется. И висит где то с пару минут, потом сам удаляется.
Если удалить в козину- требует права админа, хотя я и так в групе админ. Бывает и такое, на других машинах с семеркой файлы удаляются сразу.
Наверное что то намудрил в политиках безопасности.
Записан
Bepec
Гость
« Ответ #10 : Январь 22, 2015, 13:16 »

Видимо у вас что то действительно с политиками и самое виндой. Лично я бы воспринял "воскрешение" файла как прямой вызов к поединку с ОС Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.