Автоматично обновяване на C# програми
.collapse">Съдържание
Преди няколко години, докато все още програмирах в Delphi, аз лично изградих за себе си определен код за автоматично актуализиране, който по-късно стана незаменим при разработването на всяка програма, където има актуализация. В момента този код е напълно пренаписан на c # и искам да го споделя с вас.

Първо, нека дефинираме целите на това внедряване:
- Когато се намери нова версия, актуализацията трябва да се извърши автоматично;
- След актуализацията програмата трябва автоматично да се рестартира;
- След актуализацията името на програмата трябва да остане същото.
Етап 1: Проверка на версията
Поради мързела ми да търся най-добрия вариант, на сайта бяха публикувани 2 файла:
- myprogram.exe
- версия.xml
Продължавай. Файловата структура на версията изглежда така:
Към формуляра е добавен компонент backgroundWorker (за реализиране на фоново зареждане на файл) със следния код в DoWork манипулатора:
Какво виждаме в кода по-горе: Тъй като нашата версия може да има голям брой, ние използваме двойния тип променлива. За да сравним версиите, премахваме всички точки и преобразуваме версията от низ в число (в примера числото ще бъде 10237). Ще направим същото сс версията на самия файл, присвоена на променливатаthisVersion.
След това трябва да сравним локалната версия с отдалечената и ако нашата версия е по-малка от отдалечената, първо показваме съобщение, информиращо за по-нататъшна актуализация. След това програмата започва да изтегля файла в същата папка, от която е стартирана. Файлът се казваtemp_myprogram.
За проследяване на състоянието на зареждане, към формуляра беше добавен компонент progressBar и към кода беше добавена функция:
Функцията показва състоянието на изтегляне на файла в лентата за напредъка. Това е само за показване. И така, ние качихме нашия файл, какво трябва да направим след това? И тогава функциятаdownload_Completedвлиза в действие, съдържаща кода:
Тук всичко е просто: стартирайте файлаupdater.exeс параметрите, които ще обсъдя в следващата стъпка. Във втория ред посочваме необходимостта от принудително затваряне на приложението.
Етап 2: Обработка на актуализация
След това помощната програмаupdater.exeидва на помощ, чиято функционална функция е да проверява завършването на основното приложение и да обработва актуализацията. Е, нека не навлизаме в текста и да преминем направо към кода:
Тъй като не се нуждаем от формуляри, проектът е изграден като нормално конзолно приложение, което е доста лесно за работа. Задайте цикъл, който проверява дали процесът, посочен във втория параметър, се изпълнява. Ако процесът бъде намерен, командатаKill()ще бъде предадена към него за принудително прекратяване, след което изчакваме 300 милисекунди и повтаряме. Цикълът ще работи, докато процесът приключи.
След това изтрийте стария файл. За да елиминираме някои грешки (по-вероятно грешки в мозъка), добавяме функция за проверка на съществуването на файл. След изтриванепреименувайте името на файла, посочено в 1-ви параметър, на името, посочено във 2-ри параметър. В нашия случай файлътtemp_myprogramще бъде преименуван наmyprogram.exe, след което процесътmyprogram.exeще бъде стартиран и прозорецът на програмата за актуализиране ще бъде затворен. Искам също така да кажа, че използвам програмния файл "updater" във всички мои проекти, където се изисква, тъй като не е обвързан с конкретно приложение.
И преминаваме към следващата стъпка:
Етап 3: Завършване
И сега виждаме, че актуализираният файл с версия е стартиран успешно и прозорецът „актуализация“ е затворен. печалба!
Статията е написана въз основа на стартовия модул за PROTanks modpack за играта World of Tanks с оригинални екранни снимки на приложението. За тези, които казват, че „тази функционалност я няма“, веднага ще кажа, че този стартер е в бета тестване и е достъпен за ограничен брой хора.
Ако някой има нужда от файлаupdater.exe, винаги може да изтегли текущата му версияТУКот моя официален уебсайт. Текущата версия е1.0.0.2.
И на този ред нашият автоматичен код за актуализиране приключва.