Стоит задача сделать самообновление программе на С++. Программа это экзешник, длл и несколько файлов. Собраны будут в итоге в простейшую инсталляцию через MSI.
Надо, чтобы программа могла сама себя обновлять. Как?
Я про себя понапридумывал кучу вариантов, включая всякие временные переименования экзешников, независимый лаунчер, скрипт в шедулере винды и т.п. Но подозреваю, что есть какой-то более простой и штатный метод. Желательно только как можно более простой.
P.S. С моей предыдущей темой, тоже про обновление, это никак не связано. "Там другое" (С)
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
B>Я про себя понапридумывал кучу вариантов, включая всякие временные переименования экзешников, независимый лаунчер, скрипт в шедулере винды и т.п. Но подозреваю, что есть какой-то более простой и штатный метод. Желательно только как можно более простой.
Стандартного подхода к сожалению нет. Значит, делают кто во что горазд. MSI вообще никак не регламентирует обновление с сервера, AFAIK.
Я предпочитаю самое простое — проверка новой версии на сервере, если есть, оповещение юзера диалогом с кнопкой, которая открывает браузер, чтобы юзер сам скачал и поставил, если захочет.
В организации (где MSI вообще имеет смысл) всё равно всё рулится админом, а там поддержка установки есть (GroupPolicy или SCM).
Здравствуйте, bnk, Вы писали:
bnk>Я предпочитаю самое простое — проверка новой версии на сервере, если есть, оповещение юзера диалогом с кнопкой, которая открывает браузер, чтобы юзер сам скачал и поставил, если захочет.
Самое простое, но этот вариант признан как "не вариант". Считается что в программе, которая экономит время пользователя, недопустимо предлагать ему обновляться вручную самому.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: Как самообновлять программу, поставленную в .msi?
Здравствуйте, Basil2, Вы писали:
B>Надо, чтобы программа могла сама себя обновлять. Как?
Обычно делается второй экзешник — апдейтер. Основная программа обнаруживает, что есть новая версия, скачивает ее, получает согласие пользователя, и запускает этот апдейтер, а сама завершается. Апдейтер обновляет все и запускает новую версию в случае успеха. В случае неудачи откатывает на старую. В твоем случае это может быть просто запуск MSI в тихом режиме с нужными ключами.
Как вариант, запуск апдейтера может выполняться при старте основной программы, если обновление уже скачано ранее. Так делает, например, Firefox.
Re[2]: Как самообновлять программу, поставленную в .msi?
Здравствуйте, wildwind, Вы писали:
B>>Надо, чтобы программа могла сама себя обновлять. Как?
W>Обычно делается второй экзешник — апдейтер. Основная программа обнаруживает, что есть новая версия, скачивает ее, получает согласие пользователя, и запускает этот апдейтер, а сама завершается. Апдейтер обновляет все и запускает новую версию в случае успеха.
Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: Как самообновлять программу, поставленную в .msi?
Здравствуйте, Basil2, Вы писали:
B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?
MSI из коробки интегрирован с Windows Restart Manager. Интеграция с WRM это ота штука которая предлагает повторить попытку, закрыть процессы или установить как есть, а потом перезапустить виндовс. С ней всякие левые полуработающие решения могут не понадобиться.
А апдейтер, можно хоть и из %temp% запускать. Главное потом чистить за собой (сейчас по моему это вообще не модно стало).
Re[3]: Как самообновлять программу, поставленную в .msi?
Здравствуйте, Basil2, Вы писали:
B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?
Нет, апдейтер это отдельный экзешник, поставляемый с твоей программой. Он или обновляет все сам, или в твоем случае запускает MSI. Разумеется, сам апдейтер при этом не обновляется. В тех редких случаях, когда нужно обновить сам апдейтер, это может сделать, например, основная программа.
Re[3]: Как самообновлять программу, поставленную в .msi?
Здравствуйте, Basil2, Вы писали:
B>Так апдейтер это же часть msi — как он может обновить всё, если он запущен а в новом msi его экзешник? А если апдейтер не часть msi, то откуда он возьмется?
Visual Studio как ставится? Точно так же — при нахождении обновы стартуется отдельная софтина — VS Installer, он уже делает всю прочую магию с закрытием запущенных студий и т.п.