2008-09-05 2 views
8

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

ответ

9

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

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

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

0

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

0

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

1

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

1

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

0

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

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

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

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

1

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

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

Смежные вопросы