Как перезаписать файлы для процедуры обновления
Я пытаюсь создать средство обновления для своего приложения в VB.NET. Нет, я не хочу использовать clickonce, это отстой, потому что мне приходится иметь дело с управлением самозаверяющими сертификатами и т. Д.
Я знаю код для проверки новых файлов обновлений:
Я также знаю код для указания, куда эти файлы загружать, проблема в том, что я не хочу просто загружать 1.exe... Я хочу загрузить все последние файлы сборки, которые я бы загрузил на свой сервер, которые у меня были бы взято из папки Bin \ release моего проекта.
Затем, когда программа обновления загружает файлы в каталог, она попадает в каталог приложения и каким-то образом перезаписывает / заменяет все файлы, которые изменились... может быть, используя хеш или что-то еще?
Я не знаю, как поступить с этим. Что я знаю, так это
Средство обновления и основное приложение должны быть разделены, чтобы средство обновления могло выполнять замену, когда приложение закрыто, чтобы не допускать ошибок при использовании файла. После того, как приложение для обновления завершит работу, оно запустит основное приложение из нового exe-файла.
Буду признателен за помощь здесь, ребята.
2 ответа
В настоящее время я работаю над проектом, для которого я должен реализовать аналогичный подход для обновлений. Проект длительный, на его завершение потребуется некоторое время. Но вот как я планировал применить обновления:
- Будет две основные части: Launcher (основная прикладная программа) и Updater (чтобы загрузить файлы с сервера и заменить их новыми, а затем запустить новый файл)
- Приложение будет иметь возможность вручную проверять наличие обновлений, а также проверять наличие обновлений при запуске.
- Если доступно обновление, пользователь просит применить его сейчас или позже.
- Если пользователь решает применить обновление сейчас, то приложение Updater выполняется в отдельном процессе, а затем приложение Launcher закрывается из кода в Launcher. Я имею в виду следующие подходы, чтобы запустить другую программу изнутри, а затем выйти:
- Запустите программу обновления непосредственно из панели запуска, используя Process.Start
- Если это вызывает проблему, то при втором подходе запустите командную строку из Process.Start, запустите другую программу (Updater) из командной строки, закройте командную строку и выйдите из программы запуска.
Затем приложение Updater загружает все соответствующие файлы с сервера и после завершения старые файлы приложения заменяются новыми.
- Обновленная информация о доступности с сервера будет включать в себя новый Version_No приложения. Чтобы предоставить все файлы для обновления, я сожму (zip) все из них в один файл с именем Application.Version_No (как указано сервером).
- По завершении загрузки распакуйте (разархивируйте) их в папку с именем Application.Version_No.
- После распаковки все файлы в этой папке (Application.Version_No) будут скопированы в папку Bin приложения.
Файл запуска нового приложения выполняется в отдельном процессе, а приложение Updater закрывается из кода в Updater.
Я еще не пробовал этот сценарий, так как в настоящее время я сосредоточен на заполнении основного заявления, но, безусловно, это должно сработать.
ОБНОВИТЬ:
Другой подход к проверке обновлений заключается в использовании начальной загрузки, такой как запуск приложения. Это будет основной точкой входа в программу. После выполнения он проверит наличие обновлений и, если их нет, запускается программа запуска, в противном случае она загрузит файлы, заменит старые и затем запустит новый / обновленный модуль запуска.
Для копирования / переопределения файлов
- Один из подходов состоит в том, чтобы включать в сжатый (zip) файл только те файлы, которые необходимо заменить старыми, а затем после завершения загрузки либо непосредственно распаковать их в папку Bin, либо распаковать в указанную папку, а затем скопировать. все они в папку Bin.
- В качестве другого подхода, который кажется несколько длинным, для загрузки может быть подготовлен дополнительный вспомогательный файл (XML, текст или любой другой формат).
- Этот вспомогательный файл содержит информацию об обновленных файлах, такую как номер версии каждого файла, место, где они должны быть скопированы и т. Д.
- Файлы могут быть загружены в определенную папку с именем новой версии приложения.
- После загрузки всех необходимых файлов в определенную папку обработайте каждый файл, указанный в вспомогательном файле. Сравните версию каждого старого файла с новым загруженным файлом. Если это последняя версия, замените ее в папке, указанной в файле помощника.
- Еще один шаг между всеми загрузками может быть проверен перед копированием и заменой.
Создан апдейтер, который поставляется с демоном. Основной проект здесь:
https://github.com/UVLabs/dotNetUpdatify
Должен быть способ устранить использование демона, если я это выясню, я обновлю.