Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: OKTA от Сентябрь 08, 2014, 12:37



Название: [РЕШЕНО] Удалить себя
Отправлено: OKTA от Сентябрь 08, 2014, 12:37
Товарищи. Запускаю приложение и в конце работы оно должно удалить себя и всю папку, в которой сидит. Соответственно ничего другого, кроме отложенного запуска команды rmdir я не вижу. Но вот вопрос, как запустить эту шляпу с правами админа? Ибо без них она отказывается что-либо удалять собака!  ??? ???


Название: Re: Удалить себя
Отправлено: Пантер от Сентябрь 08, 2014, 13:11
Обычно удаление решается таким образом: создаем файл в тэмпе:

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


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


Название: Re: Удалить себя
Отправлено: OKTA от Сентябрь 08, 2014, 13:56
Вопрос в методе удаления не стоит - главное, как запустить это с правами администратора? Потому что сейчас запускаю через QProcess::startDetached, но запускается скрипт с правами меньшими, чем даже у программы  ???


Название: Re: Удалить себя
Отправлено: OKTA от Сентябрь 08, 2014, 16:15
Так, ну вроде дело продвинулось, но теперь другой симптом))
rmdir удаляет все файлы в папке, кроме самой папки  ;D
Почему так может происходить? Опять из-за прав?


Название: Re: Удалить себя
Отправлено: OKTA от Сентябрь 08, 2014, 16:25
Все, вопрос снят.  :)


Название: Re: Удалить себя
Отправлено: vizir.vs от Сентябрь 09, 2014, 10:49
Все, вопрос снят.  :)

А можно ответ узнать?


Название: Re: [РЕШЕНО] Удалить себя
Отправлено: OKTA от Сентябрь 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 перед записью данных.