Самостоятельное обновление

Каков наилучший способ завершить программу, а затем запустить дополнительный код из программы, которая завершается? Например, что может быть лучшим способом для программы самообновления?

7 ответов

Решение

У вас есть пара вариантов:

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

Вы также можете переименовать исполняемый файл программы во время ее работы. Следовательно, вы можете получить файл с какого-либо сервера обновлений и заменить его. При следующем запуске программы она будет использовать новый.exe. Затем вы можете удалить переименованный файл при запуске.

Было бы очень полезно узнать, на каком языке мы говорим здесь. Я уверен, что мог бы дать вам несколько действительно полезных советов для этого в PowerBuilder или Cobol, но это не совсем то, что вам нужно! Однако, если вы говорите на Java, вы можете использовать отключенный хук - отлично работает для меня.

Это облегчает, если у вас есть дополнительное приложение, которое запускает обновления. Вы бы запустили приложение "Updater", а затем внутри него подождите, пока другой процесс завершит работу. Если вам нужен доступ к обычным DLL-файлам приложений и тому подобному, но они также требуют обновления, вы можете запустить программу обновления из вторичного расположения с уже обновленными DLL-библиотеками, чтобы они не использовались в исходном местоположении.

Еще одна вещь, которую следует учитывать, - это то, что большинство "основных" приложений, которые я использовал (FileZilla, Paint.NET и т. Д.), Имеют средства обновления, удаляющие предыдущую версию приложения, а затем выполняют новую установку новой версии. приложения.

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

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

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

У нас есть внешний процесс, который выполняет обновление для нас. Когда он находит обновление, он загружает его во вторичную папку и ждет завершения работы основного приложения. При выходе он заменяет все текущие файлы. Основной процесс запускает процесс обновления каждые 4 часа. Поскольку процесс обновления будет ожидать выхода из основного приложения, основное приложение не должно выполнять какую-либо специальную обработку, кроме запуска приложения обновления.

Это побочная проблема, но если вы планируете написать свой собственный процесс обновления, я бы посоветовал вам рассмотреть возможность использования какого-либо сжатия для (1) сохранения при загрузке и (2) предоставления одного файла для извлечения с сервера обновлений.,

Надеюсь, что это имеет смысл!

Мы сделали что-то подобное в нашем предыдущем приложении. Мы зафиксировали завершение программы (в.NET 2.0) с помощью кнопки X или кнопки закрытия, а затем запустили процесс фонового обновления, который пользователь не видел. Он будет проверять сервер (приложение клиент-сервер) на наличие обновлений, и если он будет доступен, он будет загружаться в фоновом режиме с помощью BITS. Затем в следующий раз, когда приложение откроется, оно поймет, что появилась новая версия (мы установили флаг), и выдаст сообщение, предупреждающее пользователя о новой версии, и кнопку, которую нужно щелкнуть, если они захотят просмотреть добавленные новые функции. к этой версии.

Другие вопросы по тегам