Подтвердить что ты не робот

Как само приложение запускает обновление?

Пусковые установки чаще всего встречаются в играх. Подумайте о Лиге Легенд, Starcraft II или почти любой MMO. Перед началом реальной игры у вас есть небольшое приложение для запуска, которое заботится о обновлениях и исправлениях.

Я хочу двигаться в этом направлении с помощью определенного не-игрового приложения, которое я разрабатываю. Концепция пусковой установки имеет прекрасный смысл: она проверяет наличие обновлений, заменяет соответствующие бинарные файлы/библиотеки, может запускать проверку целостности и запускает приложение. Однако, как пусковые установки обновляют себя? Это, как правило, редкое событие, но как это делается? Разве пусковая установка буквально просто пишет по самой двоичной системе, из которой она сейчас работает? Или есть какой-то шаг подкачки после загрузки? Мне нужно иметь возможность выталкивать (редкие) обновления для запуска (особенно если я обнаружил ошибку в моей пусковой установке).

Мой конкретный проект будет в С#, но меня интересуют концептуально похожие С++ и/или Java-решения, а также для справок в будущем.

4b9b3361

Ответ 1

Я никогда не пробовал, но это то, что я бы предположил (предполагая, что вы не можете перезаписать исполняемый файл. Если это возможно, все это проще)

Updater A checks if its the newest version
If launcher isnt the newest version
    Download the differences (to save bandwidth) to file B
    Apply the delta to own code into file C
    Launch file C.
    Close
If file C exists (update happened recently)
    Try to delete C  (update was previous launch, delete temporary file)
    If delete fails  (We are C, means A is out of date)
        Copy C over A  (update launcher)
        Note that you can keep going, don't have to restart even though we are C.
If game isnt newest version
    Download the differences (to save bandwidth) to file B
    Apply the delta to game into file D
    delete game
    Rename D -> game
Run game

Андре Карон показал мне, что своп-трюк сделан лучше с транзакционный файл IO.

Ответ 2

Если вы находитесь в мире .NET, существует стратегия развертывания под названием "Click Once". Это было создано для решения проблемы, которую вы описали...

ClickOnce - это технология развертывания, которая позволяет создавать самообновляющиеся приложения на базе Windows, которые можно устанавливать и запускать с минимальным взаимодействием с пользователем. При развертывании ClickOnce реализованы три основные проблемы, присущие развертыванию:

Источник: Нажмите Once

Прежде чем приступать к этой стратегии, я предлагаю исследовать ее плюсы и минусы, потому что есть жадные поклонники и хулители.

Вкратце, вы загружаете новые версии на веб-сайт (о котором приложение настроено, чтобы знать). Во время запуска приложение проверяет сайт и, если оно есть, предлагает пользователю диалог. Когда пользователь выбирает приложение для обновления, приложение останавливается и одновременно активируется компонент "щелчок один раз" для применения изменений. Затем компонент перезапускает исполняемый файл, и все это выглядит как плавная операция для конечного пользователя...

Ответ 3

В основном программа запуска проверяет, есть ли ее более новая версия, и если она запускает задачу для получения новой версии, а затем выполняет ее и затем закрывается.

Учитывая, что приложение обновления мало и быстро загружается, вы можете обнаружить, загрузить, закрепить диалог, чтобы сказать, что есть новая версия, и едва мерцать, когда старая версия закрывается, а новая запускается.