Есть ли способ сделать самообновляемый исполняемый файл в Windows? - PullRequest
3 голосов
/ 20 января 2009

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

Я думаю, что было бы лучше, чем разделять исполняемый файл "Updater", потому что, что, если необходимо обновить программу обновления?

Я не могу иметь общие папки в сети.

Ответы [ 4 ]

4 голосов
/ 20 января 2009

Исполняемый файл не может заменить свой собственный файл, но он может загрузить новый Exe в известное место или имя файла в том же каталоге, а затем, при выходе, запустить процесс, который переключает файл, чтобы вы получили обновление следующий раз, когда он работает.

Если подумать, то в любом случае это лучший подход, так как вы не могли быть уверены, что загрузка файла завершится. Даже если бы вы могли, действительно ли вы хотите, чтобы пользователь дождался завершения загрузки? Нет ... лучше, чтобы загрузка работала в фоновом режиме.

2 голосов
/ 20 января 2009

https://stackoverflow.com/questions/264788/can-i-update-a-exe-that-is-running-closed

Да, вы можете загрузить exefile самостоятельно. Просто переименуйте исполняемый exe-файл в .bak, загрузите новый exe-файл как .exe, затем перезапустите приложение.

Ключевым моментом здесь является то, что вы не можете загрузить новую версию поверх старой версии, когда программа работает, и решение состоит в том, что вы МОЖЕТЕ переименовать работающий exe, и ТО скачайте новую с тем же именем, что и у запущенного exe ранее. произошло переименование. Тогда это просто проверка размера загруженного exe: s и перезапуск программы, и вы уже в работе!

1 голос
/ 20 января 2009

Если вы работаете с приложением .NET и вам нужно что-то простое. У Microsoft есть клик за развертывание , который делает то, что вы ищете. Перед использованием развертывания ClickOnce я разработал базовый модуль обновления. Выполнение произошло, когда программа запустилась, она проверила наличие новой версии файлов в фоновом потоке. Если бы было доступно обновление, оно загрузилось бы в этот фоновый поток. Если бы обновление было для исполняемого файла средства обновления, то я бы заменил исполняемый файл. В противном случае я бы уведомил пользователя, что обновление готово к установке. Они сохранят свою работу и нажмут кнопку обновления. Это запустит исполняемый файл средства обновления, который заменит файлы и перезапустит программу. Это было очень просто, но не делало инкрементных обновлений хорошо или версионирования хорошо. Я также предоставил функцию отката, чтобы файлы, которые были заменены, были сохранены на случай, если пользователь захочет выполнить откат до предыдущей версии. Я не держал историю версий. Вместо этого я предположил, что последняя версия была хорошей версией.

0 голосов
/ 20 января 2009

Если вы используете .NET Framework, я настоятельно рекомендую ClickOnce. Его можно настроить для выполнения обновления при каждом выполнении.

Существует несколько способов получить обновление ClickOnce, так сказать. Я напишу в блоге об этом на днях. Идея состоит в том, чтобы обновление выполнялось как обычно, но затем, когда ваше приложение запускает, отобразит диалоговое окно, в котором обновление было изменено, затем перенаправьте пользователя для загрузки и установки исполняемого файла снова. Отправка ключевых команд может автоматизировать процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...