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

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

8 голосов
/ 05 сентября 2008

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

Ответы [ 7 ]

10 голосов
/ 05 сентября 2008

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

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

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

1 голос
/ 05 сентября 2008

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

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

1 голос
/ 05 сентября 2008

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

0 голосов
/ 05 сентября 2008

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

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

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

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

0 голосов
/ 05 сентября 2008

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

0 голосов
/ 05 сентября 2008

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

0 голосов
/ 05 сентября 2008

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

...