Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
angryjack93
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
1

Создание апдейтера

24.02.2015, 22:24. Просмотров 645. Ответов 15
Метки нет (Все метки)

Всем привет! У меня есть приложение на Qt, которое обновляется. Если обновления есть, то оно запускает второе приложение (апдейтер), а само закрывается. Апдейтер, естественно, все файлы заменяет (включая саму программу). НО! Если запустить апдейтер из программы, то он не заменяет ничего. Запускаю его в деструкторе окна:
C++ (Qt)
1
2
3
4
5
6
7
8
MainWindow::~MainWindow(){
        std::string path("\"" + QApplication::applicationDirPath().toStdString() + "\\nikki_updater.exe\"");
        while(path.find('/') != std::wstring::npos)
            path.replace(path.find('/'), 1, "\\");
        path += " /runas /savecred";
        delete ui;
        system(path.c_str());
}
Если запускать отдельно апдейтер, то всё отлично заменяется... В чем может быть проблема? Может я не туда запуск поместил?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2015, 22:24
Ответы с готовыми решениями:

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

Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД)
В задание для курсовой работы по БД входят вот такие пункты: 1.2 Создание...

Хочу освоить и применить на практике создание локальной сети, создание домена
Доброго времени суток. Господа, на днях начал осваиваю win server 2003. Хочу...

Создание БД учет заявок на доступ к информационным ресурсам: создание отчетов
Доброго времени суток. Это всего вторая моя попытка что-то наваять в MS...

Создание кода из строк или создание произвольного количества объектов
Привет сообществу. Возник такой вопрос: Мне в мидлете необходимо создать...

15
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
24.02.2015, 22:31 2
Qt тут причем??? где, покажите пожалуйста здесь Qt????

QApplication::applicationDirPath()
ну да, это конечно круто, а все остальное прошу простить - это далеко не кьют...

по поводу запуска из кьюта:
QProcess и QDesktopService в помощь... информацию по этим классам сможете найти на оф. сайте ;-)
1
angryjack93
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
24.02.2015, 23:31  [ТС] 3
Сделал так
C++ (Qt)
1
2
QProcess *process = new QProcess(this);
        process->startDetached("./nikki_updater.exe", QStringList());
Все нормально, если запустить от имени администратора программу, тогда и апдейтер все заменяет. Но без админа даже не запускается...
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
24.02.2015, 23:34 4
эммм.... не уверен, что такое хорошо писать в деструкторе
0
angryjack93
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
24.02.2015, 23:35  [ТС] 5
хм, а куда тогда записать вообще?:\
Просто апдейтер должен заменять саму программу... Как тогда реализовать?((
0
den_rain
5 / 5 / 2
Регистрация: 20.10.2014
Сообщений: 14
24.02.2015, 23:45 6
Запустите дочерний процесс с апдейтером.
Пусть апдейтер убедится что он запущен и готов к работе.
Пусть он сообщит об этом программе родителю. Или родитель сам определит что апдейтер готов.
Пусть родитель детачит апдейтер от себя и закрывается.
Пусть апдейтер определяет когда программа закрылась.
И наконец спокойно все обновляет.
1
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
24.02.2015, 23:49 7
Цитата Сообщение от angryjack93 Посмотреть сообщение
хм, а куда тогда записать вообще?:\
а вопрос оч интересный и есть где разгуляться, мы на предыдущей работе писали систему обнавления, за месяц мы толком ничего толкового не сделали, в плане проектирования.... точнее сделали конечно, но этого было недостаточно и все равно глюкаво работало... так, что тут не все так просто и прозрачно как хотелось бы
0
angryjack93
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
24.02.2015, 23:51  [ТС] 8
У меня только один вопрос - как узнать из апдейтера (то бишь другого процесса), что приложение закрыто?..
Проблема ещё в том, что пользователь может установить программу в Program Files (а обычно так оно и происходит), а, значит, нужны права администратора для записи в эту папку...
0
den_rain
5 / 5 / 2
Регистрация: 20.10.2014
Сообщений: 14
25.02.2015, 00:08 9
Цитата Сообщение от angryjack93 Посмотреть сообщение
У меня только один вопрос - как узнать из апдейтера (то бишь другого процесса), что приложение закрыто?..
Проблема ещё в том, что пользователь может установить программу в Program Files (а обычно так оно и происходит), а, значит, нужны права администратора для записи в эту папку...
Как обмениваться даными между процессами?
Да мильон способов... Например тот же shared memory.

Добавлено через 1 минуту
Цитата Сообщение от angryjack93 Посмотреть сообщение
У меня только один вопрос - как узнать из апдейтера (то бишь другого процесса), что приложение закрыто?..
Проблема ещё в том, что пользователь может установить программу в Program Files (а обычно так оно и происходит), а, значит, нужны права администратора для записи в эту папку...
Ну а с правами, тут вы ничего поделать не сможете априори. Только ежели предоставить удобный для пользователя механизм выдачи админских прав своему апдейтеру.
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
25.02.2015, 00:10 10
Цитата Сообщение от den_rain Посмотреть сообщение
е shared memory.
фу-фу-фу... сокеты гораздо гибче и безопастней...
Цитата Сообщение от angryjack93 Посмотреть сообщение
Проблема ещё в том, что пользователь может установить программу в Program Files
а вдруг линух?
0
angryjack93
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
25.02.2015, 00:12  [ТС] 11
Ну, пока только Windows... А у Вас, случайно, нет материалов почитать, как получить права админа приложению?
0
den_rain
5 / 5 / 2
Регистрация: 20.10.2014
Сообщений: 14
25.02.2015, 00:13 12
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
фу-фу-фу... сокеты гораздо гибче и безопастней...
Сокеты тоже хороши
А если речь идет конкретно про вопрос, закрылось ли конкретное приложение, то можно так:
Заранее узнать айдишник процесса в системе. И потом периодически спрашивать систему через ее апи об этом процессе.
1
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
25.02.2015, 00:20 13
Цитата Сообщение от den_rain Посмотреть сообщение
А если речь идет конкретно про вопрос, закрылось ли конкретное приложение, то можно так:
Заранее узнать айдишник процесса в системе. И потом периодически спрашивать систему через ее апи об этом процессе.
а баба яга снова против)))

а нафига тогда нам обвертка QProcess?? кстати рекомендую посмотреть на сигналы в этом классе, в частности на:
C++ (Qt)
1
void    finished(int exitCode, QProcess::ExitStatus exitStatus);
0
den_rain
5 / 5 / 2
Регистрация: 20.10.2014
Сообщений: 14
25.02.2015, 00:25 14
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
а баба яга снова против)))
Дык а я же не настаиваю) Вариантов куча)
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
а нафига тогда нам обвертка QProcess?? кстати рекомендую посмотреть на сигналы в этом классе, в частности на:
Вот даже такой есть)
Кто знает весь фреймворк Qt наизусть, пусть первый кинет в меня камень
0
CriDos
Поклонник Qt
313 / 209 / 41
Регистрация: 09.11.2013
Сообщений: 336
Записей в блоге: 1
25.02.2015, 00:46 15
А можно не городить велосипед, а взять готовое, отлаженное и кроссплатформенное решение: http://qt-project.org/forums/viewthread/51054
Один раз для себя выбрать, настроить и можно использовать во всех будущих проектах.
4
ArmanPrestige
Pied Piper
232 / 223 / 57
Регистрация: 15.01.2013
Сообщений: 855
Завершенные тесты: 1
25.02.2015, 10:29 16
А почему бы всегда не запускаться с апдейтера? Апдейтер запускается, проверяет файлы при необходимости обновляет, а потом запускает саму программу. Я у себя так реализовал (подсмотрел у клиента PokerStars).
1
25.02.2015, 10:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2015, 10:29

Создание формулы и последующее заполнение таблицы, избежание повторов информации, создание интерфейса
Не люблю просить о помощи, но, к сожалению, сроки поджимают и не позволяют...

Создание базы данных на лету, создание и заполнение таблиц в базе DB (Paradox? или..).
Здравствуйте Профи! --- Видел я "простенькую" (exe-шник небольшого размера,...

Создание источника данных, создание серверных страниц и выбор WEB-сервера и его установка
на практике попросили сделать задание. 1)Создание источника данных 2)Создание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru