Как самообновлять программу, поставленную в .msi?
От: Basil2 Россия https://starostin.msk.ru
Дата: 03.08.20 12:34
Оценка:
Стоит задача сделать самообновление программе на С++. Программа это экзешник, длл и несколько файлов. Собраны будут в итоге в простейшую инсталляцию через MSI.

Надо, чтобы программа могла сама себя обновлять. Как?

Я про себя понапридумывал кучу вариантов, включая всякие временные переименования экзешников, независимый лаунчер, скрипт в шедулере винды и т.п. Но подозреваю, что есть какой-то более простой и штатный метод. Желательно только как можно более простой.


P.S. С моей предыдущей темой, тоже про обновление, это никак не связано. "Там другое" (С)
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Отредактировано 03.08.2020 12:35 Basil2 . Предыдущая версия .
Re: Как самообновлять программу, поставленную в .msi?
От: bnk СССР http://unmanagedvisio.com/
Дата: 03.08.20 12:44
Оценка: 3 (1)
Здравствуйте, Basil2, Вы писали:

B>Я про себя понапридумывал кучу вариантов, включая всякие временные переименования экзешников, независимый лаунчер, скрипт в шедулере винды и т.п. Но подозреваю, что есть какой-то более простой и штатный метод. Желательно только как можно более простой.


Стандартного подхода к сожалению нет. Значит, делают кто во что горазд. MSI вообще никак не регламентирует обновление с сервера, AFAIK.
Я предпочитаю самое простое — проверка новой версии на сервере, если есть, оповещение юзера диалогом с кнопкой, которая открывает браузер, чтобы юзер сам скачал и поставил, если захочет.

В организации (где MSI вообще имеет смысл) всё равно всё рулится админом, а там поддержка установки есть (GroupPolicy или SCM).
Отредактировано 03.08.2020 12:47 bnk . Предыдущая версия .
Re[2]: Как самообновлять программу, поставленную в .msi?
От: Basil2 Россия https://starostin.msk.ru
Дата: 03.08.20 12:57
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Я предпочитаю самое простое — проверка новой версии на сервере, если есть, оповещение юзера диалогом с кнопкой, которая открывает браузер, чтобы юзер сам скачал и поставил, если захочет.


Самое простое, но этот вариант признан как "не вариант". Считается что в программе, которая экономит время пользователя, недопустимо предлагать ему обновляться вручную самому.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: Как самообновлять программу, поставленную в .msi?
От: wildwind Россия  
Дата: 10.08.20 08:58
Оценка: 3 (1)
Здравствуйте, Basil2, Вы писали:

B>Надо, чтобы программа могла сама себя обновлять. Как?


Обычно делается второй экзешник — апдейтер. Основная программа обнаруживает, что есть новая версия, скачивает ее, получает согласие пользователя, и запускает этот апдейтер, а сама завершается. Апдейтер обновляет все и запускает новую версию в случае успеха. В случае неудачи откатывает на старую. В твоем случае это может быть просто запуск MSI в тихом режиме с нужными ключами.

Как вариант, запуск апдейтера может выполняться при старте основной программы, если обновление уже скачано ранее. Так делает, например, Firefox.
Re[2]: Как самообновлять программу, поставленную в .msi?
От: Basil2 Россия https://starostin.msk.ru
Дата: 11.08.20 13:56
Оценка:
Здравствуйте, wildwind, Вы писали:

B>>Надо, чтобы программа могла сама себя обновлять. Как?


W>Обычно делается второй экзешник — апдейтер. Основная программа обнаруживает, что есть новая версия, скачивает ее, получает согласие пользователя, и запускает этот апдейтер, а сама завершается. Апдейтер обновляет все и запускает новую версию в случае успеха.


Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: Как самообновлять программу, поставленную в .msi?
От: Mystic Artifact  
Дата: 11.08.20 14:15
Оценка: 6 (1)
Здравствуйте, Basil2, Вы писали:

B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?


MSI из коробки интегрирован с Windows Restart Manager. Интеграция с WRM это ота штука которая предлагает повторить попытку, закрыть процессы или установить как есть, а потом перезапустить виндовс. С ней всякие левые полуработающие решения могут не понадобиться.

А апдейтер, можно хоть и из %temp% запускать. Главное потом чистить за собой (сейчас по моему это вообще не модно стало).
Re[3]: Как самообновлять программу, поставленную в .msi?
От: wildwind Россия  
Дата: 11.08.20 17:13
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?


Нет, апдейтер это отдельный экзешник, поставляемый с твоей программой. Он или обновляет все сам, или в твоем случае запускает MSI. Разумеется, сам апдейтер при этом не обновляется. В тех редких случаях, когда нужно обновить сам апдейтер, это может сделать, например, основная программа.
Re[3]: Как самообновлять программу, поставленную в .msi?
От: Mr.Delphist  
Дата: 13.08.20 14:17
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?


Visual Studio как ставится? Точно так же — при нахождении обновы стартуется отдельная софтина — VS Installer, он уже делает всю прочую магию с закрытием запущенных студий и т.п.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.