Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top