Я написал собственное автоматическое обновление и, в принципе, работает так:
В целом приложение состоит из 3 частей:
- Модуль запуска .exe, который по сути похож на загрузчик
- Модуль запуска .exe имеет встроенный ресурс .exe, который используется, если необходимо обновить сам файл запуска .exe
- Приложение DLL
Когда вы запускаете приложение, запускающее приложение запускается и проверяет через веб-сервисы актуальность DLL. Если это не так, он загружает их во временный каталог, а затем проверяет правильность контрольных сумм и перезаписывает существующие библиотеки приложений новыми. Затем он загружает базовую сборку приложения и вызывает метод «Выполнить» через отражение.
Теперь в нашем приложении иногда возникает необходимость обновить сам модуль запуска, и мы достигли этого путем встраивания файла .exe в ресурсы модуля запуска .exe. Если модуль запуска обнаруживает, что доступен новый модуль запуска .exe, он загружает его во временный каталог, затем извлекает файл .exe и запускает его. Этот извлеченный файл .exe просто завершает процесс запуска, копирует новый файл запуска .exe поверх старого и затем снова запускает процесс запуска.