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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Удалить себя  (Прочитано 5308 раз)
OKTA
Гость
« : Сентябрь 08, 2014, 12:37 »

Товарищи. Запускаю приложение и в конце работы оно должно удалить себя и всю папку, в которой сидит. Соответственно ничего другого, кроме отложенного запуска команды rmdir я не вижу. Но вот вопрос, как запустить эту шляпу с правами админа? Ибо без них она отказывается что-либо удалять собака!  Непонимающий Непонимающий
« Последнее редактирование: Сентябрь 08, 2014, 16:26 от OKTA » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 08, 2014, 13:11 »

Обычно удаление решается таким образом: создаем файл в тэмпе:

Код:
start:
rmdir ....
if errorlevel=0 goto end
sleep 60
goto start
end:


И запускаем. Написано псевдокодом, я сейчас под Линухом.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #2 : Сентябрь 08, 2014, 13:56 »

Вопрос в методе удаления не стоит - главное, как запустить это с правами администратора? Потому что сейчас запускаю через QProcess::startDetached, но запускается скрипт с правами меньшими, чем даже у программы  Непонимающий
Записан
OKTA
Гость
« Ответ #3 : Сентябрь 08, 2014, 16:15 »

Так, ну вроде дело продвинулось, но теперь другой симптом))
rmdir удаляет все файлы в папке, кроме самой папки  Смеющийся
Почему так может происходить? Опять из-за прав?
Записан
OKTA
Гость
« Ответ #4 : Сентябрь 08, 2014, 16:25 »

Все, вопрос снят.  Улыбающийся
Записан
vizir.vs
Гость
« Ответ #5 : Сентябрь 09, 2014, 10:49 »

Все, вопрос снят.  Улыбающийся

А можно ответ узнать?
Записан
OKTA
Гость
« Ответ #6 : Сентябрь 09, 2014, 11:03 »

В общем, самый простой способ, это использовать скрипт, т.к. запуск cmd с последующим вызовом rmdir через QProcess не прокатывает.
Скрипта мне хватило примерно такого:
Код:
cd .. 
timeout /t 1 /nobreak
rmdir "путь" /s /q"

cd .. нужен, чтобы выбраться из текущей директории, т.к. иначе она сама не удалится.
timeout вместо sleep, т.к. sleep у меня не работал и в итоге оказалось, что он устаревший.
Запускать скрипт надо через QDesktopServices::openUrl.
Файл скрипта я создавал в temp и для поддержки русских путей ставил setCodec("CP-866") на QTextStream перед записью данных.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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