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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перезапуск приложения  (Прочитано 8843 раз)
Godfather
Гость
« : Июнь 02, 2008, 20:01 »

Такой вопрос - как из под приложения перезапустить самого себя?

Пробовал QProcess::start() но я так понял что это запуск дочернего процеса, и если основной убить, умирает и этот

Ситуация следующая:
Код:
QMessageBox::StandardButton ret = QMessageBox::question(this, strMsgTitle, QString::fromLocal8Bit("Что бы изменения вступили в силу, необходимо перезапустить приложение. Сделать это сейчас?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
switch(ret)
{
case QMessageBox::Yes:
{
QProcess* proc = new QProcess();
proc->start(QApplication::applicationDirPath() + "/app.exe");
QApplication::quit();
break;
}
case QMessageBox::No:
{
reject();
break;
}
case QMessageBox::Cancel:
{
return;
break;
}
}
Записан
Sergeich
Гость
« Ответ #1 : Июнь 02, 2008, 21:41 »

Код:
if ( QProcess::startDetached(QString("\"") + QApplication::applicationFilePath() + "\"") )
  QApplication::quit();
else
  qDebug("WTF!!! Can't restart process!");
« Последнее редактирование: Июнь 02, 2008, 21:46 от Sergeich » Записан
Alex03
Гость
« Ответ #2 : Июнь 03, 2008, 06:21 »

У меня прога пользовала некоторые общие ресурсы в монопольном режиме (да ещё была проверка на запуск второго экземпляра), поэтому делал таким кривоватым способом:
1. Выделил код возврата из приложения для перезапуска
2. запускал прогу из скрипта (bash / cmd-в винде) в котором в цикле запускал прогу пока код возврата - ПЕРЕЗАПУСК.

Правда в цикле скрипта у меня ещё кое что было, что ещё более оправдывало такой подход.... Улыбающийся
Записан
Godfather
Гость
« Ответ #3 : Июнь 03, 2008, 12:37 »

спасибо большое! то что надо!
Код:
QProcess::startDetached(QApplication::applicationFilePath(), QStringList(), QApplication::applicationDirPath());
Записан
Sergeich
Гость
« Ответ #4 : Июнь 03, 2008, 16:53 »

Код:
QProcess::startDetached(QApplication::applicationFilePath(), QStringList(), QApplication::applicationDirPath());
Если в пути к файлу присутствует пробел (например C:/Documents and Settings/User/Мои документы), то путь нужно заключать в кавычки, иначе под виндой QProcess не запустится.
Цитировать
On Windows, arguments that contain spaces are wrapped in quotes.
Записан
Godfather
Гость
« Ответ #5 : Июнь 03, 2008, 19:51 »

точняк, забыл совсем
Записан
Alex03
Гость
« Ответ #6 : Июнь 04, 2008, 06:25 »

А я в X11 во времена 3-ей Qt наступал на грабли с QApplication::applicationFilePath()/QApplication::applicationDirPath().
Там прямо у ОС узнать нельзя, поэтому Qt действовала несколько эвристически, на основе arg[0], переменной окружения PATH и текущего пути.
Так вот грабли заключались в том что bash (и видимо другие шеллы) по разному относительно qt воспринимали "пустой путь" в PATH.
Т.е. когда
PATH=:dir1:dir2
PATH=dir1::dir2
PATH=dir1:dir2:

Постил об этом тролям но чтото тогда ответа не было.... 4-5лет назад дело было... Сейчас не знаю как обстоит дело... Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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