Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57

Автообновление программы

10.07.2016, 18:59. Показов 5720. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане, пишу функцию автообновления программы. Все работает, осталось только заменить старые файлы на новые. Вопрос следующий, как сделать так чтобы исходное приложение после запуска и загрузки обновленных файлов само обновило свои старые файлы на новые и потом запустило уже новую версию? Прошу привести пример кода с пояснениями, что и зачем нужно. Заранее буду благодарен за ответ, если что-то не понятно задавайте уточняющее вопросы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2016, 18:59
Ответы с готовыми решениями:

Автообновление программы
Здорова парни!) Помогите пожалуйста, мне нужно сделать Автообновление прогаммы, но как? Программа сама уже давно готова, но вот...

Автообновление Label
Всем привет! Возникла такая ситуация. Нужно обновить всего 1 лабел путем подключения через интернет. Допустим где нибудь в текстовом...

Автообновление данных контрола
У меня есть ComboBox cb и List<MyClass> lc. Как сделать чтобы при обновлении lc обновлялся и cb автоматически? Желательно пример :)

17
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
10.07.2016, 19:26
Здравствуйте.
Делаете EXE обновления, принимающий команды из аргументов командной строки.
Запускаете его, указывая что и куда надо обновить.
Закрываете текущую версию программы.
Программа обновления обнаруживает этот факт и копирует новые файлы поверх старых. Можно ещё действия по необходимости добавить.
После копирования запускает новую версию.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
10.07.2016, 20:43  [ТС]
Rius, не могли бы вы пример кода привести или же пояснить этот?
C#
1
2
3
4
5
6
7
8
9
10
11
private void UpdateApplication(string tempFilePath, string currentPath, string newPath, string launchArgs)
{
            string argument = "/C Choice /C Y /N /D Y /T 4 & Del /F /Q "{0}" & Choice /C Y /N /D Y /T 2 & Move /Y "{1}" "{2}" & Start "" /D "{3}" "{4}" {5}";
 
            ProcessStartInfo info = new ProcessStartInfo();
            info.Arguments = String.Format(argument, currentPath, tempFilePath, newPath, Path.GetDirectoryName(newPath), Path.GetFileName(newPath), launchArgs);
            info.WindowStyle = ProcessWindowStyle.Hidden;
            info.CreateNoWindow = true;
            info.FileName = "cmd.exe";
            Process.Start(info);
}
Код нашел по ссылке: https://youtu.be/Oa7vMrGKifo?t=13m30s. Не до конца понимаю, что именно в данной функции в аргументы передавать и для чего это строка нужна.
C#
1
   info.Arguments = String.Format(argument, currentPath, tempFilePath, newPath, Path.GetDirectoryName(newPath), Path.GetFileName(newPath), launchArgs);
Я просто не особо понимаю, как это все сделать вообще, так как не особо хорошо работаю с аргументами командной строки, буду благодарен за помощь.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
10.07.2016, 20:54
Лучший ответ Сообщение было отмечено ANDANTINO как решение

Решение

Прикольно, но это чужое решение. Загоняющее вас в свои рамки.
Там запускается cmd.exe (типа терминал винды), в котором выполняются несколько команд одна за другой.
Команды эти choice, del, move, start. Что они делают, можете спросить в https://www.cyberforum.ru/cmd-bat/ или запустить в командной строке с параметром /?
Собственно, что они делают - очевидно из названия, а аргументы можно уточнить в их справке.

String.Format форматирует строку, как ни странно. Подставляет аргументы в строку форматирования и возвращает результат. В справке и книгах всё описано. Это самые азы фреймворка.

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

Добавлено через 3 минуты
Вы тут должны видеть "сообщение" от Similar. В нём темы, подобные этой.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
10.07.2016, 21:06  [ТС]
Rius, увы но такого сообщения не вижу.
И не могли бы вы все-таки помочь разобраться в чужом решении, а именно тут:
C#
1
info.Arguments = String.Format(argument, currentPath, tempFilePath, newPath, Path.GetDirectoryName(newPath), Path.GetFileName(newPath), launchArgs);
Я так понимаю тут идет сборка аргументов для командной строки?
argument - это строка с командами и к ней на место вставок ставятся параметры.
А вот что передается как входные данные в: currentPath, tempFilePath, newPath, Path.GetDirectoryName(newPath), Path.GetFileName(newPath), launchArgs, не совсем понимаю, особенно что за launchArgs.
Если вам не трудно объясните, чтобы я мог составить на основе данного примера шаблон, как я хочу это видеть у себя. Про класс Path и его функции я в курсе, мне непонятно зачем они что-то передают в консоль.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
10.07.2016, 21:14
Лучший ответ Сообщение было отмечено ANDANTINO как решение

Решение

Цитата Сообщение от ANDANTINO Посмотреть сообщение
argument - это строка с командами и к ней на место вставок ставятся параметры.
Типа того. https://msdn.microsoft.com/ru-... .110).aspx

Цитата Сообщение от ANDANTINO Посмотреть сообщение
А вот что передается как входные данные в:
Переменным даны "говорящие" имена. Всё должно быть очевидно. Путь к текущей программе (который надо удалить), путь к временному файлу (скачанному), путь к новому файлу (куда скачанное должно быть скопировано).
launchArgs - параметры для запуска новой программы. Зачем передают в консоль - смотрите справку /? команды Start и прочих.
1
16 / 16 / 5
Регистрация: 09.06.2015
Сообщений: 96
10.07.2016, 22:13
почитайте про ClickOnce - встроенный в visual
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 10:11  [ТС]
Rius, спасибо за помощь и советы. Благодаря вашим ответам набросал концепцию своего решения, на вид рабочая осталось реализация.
sysadkrd, читал про него не совсем то что мне нужно.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
11.07.2016, 10:13
ANDANTINO, изложите концепцию.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 10:25  [ТС]
Rius, хочу написать отдельную утилиту для консоли которая будет обновлять файлы и принимать входные аргументы для работы.
Если по этапам то:
1) Скачали обновления и проверили его на целостность.
2) Запускаем утилиту из основного приложения, а его само закрываем.
3) Утилита обновляет файлы приложения и запускает его снова.
На мой взгляд неплохое решение, по крайне мере для моего проекта.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
11.07.2016, 10:29
Дьявол в деталях...
1) Откуда скачали? Где и как хранится URI? Всегда ли этот URI будет рабочим? Сколько файлов скачали, программа из одного состоит? Как целостность проверять?
2) Как утилита дождётся закрытия программы, её запустившей? Как юзер узнает, что надо перезапустить?
3) Старые файлы перезапишутся полностью? Или конфиги, например, останутся?
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 10:37  [ТС]
Rius, 1) Сервер в сети; URI всегда будет рабочим пока будет поддержка приложения; несколько, поэтому будет передача архива; хеш-функция считается по архиву и сверяется с той что на сервере.
2) Про закрытие точно не скажу там надо тестировать, а вот пользователю руками делать не чего не надо все автоматически произойдет.
3) Конфиги менять не планировал, но если нужно будет то и их заменять буду.
А вообще по моему только реальный тест системы поможет выявить все проблемы и тогда надо будет их устранять.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
11.07.2016, 10:40
Хорошо.
1) Файловая система на сервере доступна, видимо, а не по http?
2) Если открыты несохранённые данные, то потерять их нельзя. Совсем автоматом просто только при запуске сделать. Однако в этом случае нельзя обновить запущенные программы.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 10:46  [ТС]
Rius, 1) Да файловая система есть.
2) При запуске программа сначала смотрит нет ли обновлений, а потом только запускается.
А что может быть с http? Разъясните пожалуйста ради интереса.
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
11.07.2016, 10:50
2) Иногда требуется перезапустить срочно-срочно и всем сразу, потому что выпущен мегаважный фикс. Придётся обзванивать всех пользователей и просить их перезапустить программу. А если нет телефонов - оббегать. При этом все должны находиться на местах.

С файловой системой можно просто считать архив, скипировать его, и прямо с сервера получить хэш, как от файла.
С http надо было бы поднимать сервер и backend, отдающий файл, информацию о версиях, хэшах и т.п. Гибкости больше, работы больше.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 11:00  [ТС]
Rius, ну по второму пункту вопрос спорный и неоднозначный, все зависит от проекта на мой взгляд.
Про http хотелось бы уточнить я вас правильно понял:
1) Про сервер все ясно, а вот с backend не совсем, можете пояснить точно, что это значит? Просто не встречал ранее такой термин.
2) Я так понял помимо передачи архива или файлов, сервер еще будет отправлять данные о версии, хэшы файлов и т.д. За счет этого достигается большая гибкость в плане обновления программы?
0
Эксперт .NET
 Аватар для Rius
13123 / 7684 / 1675
Регистрация: 25.05.2015
Сообщений: 23,454
Записей в блоге: 14
11.07.2016, 11:07
Цитата Сообщение от ANDANTINO Посмотреть сообщение
по второму пункту
Обновление эксзешника

Backend - программа, выполняющаяся на сервере, принимающая запросы и отправляющая ответы. Скрипт на php, например. Позволяет реализовать API. Гибкость в том, что программа может отправлять разнообразные запросы к серверу и получать осмысленные ответы. А не только скачать один файл по фиксированному пути. Всё это не обязательно, конечно.
Есть ещё термин frontend. Это тот интерфейс сайта, который видят пользователи.
1
5 / 5 / 1
Регистрация: 22.04.2015
Сообщений: 57
11.07.2016, 11:57  [ТС]
Rius, спасибо за хороший диалог. Из беседы извлек множество полезной информации для раздумий над проектом, да и вообще есть на что обратить внимание для саморазвития.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2016, 11:57
Помогаю со студенческими работами здесь

Автоопределение COM порта Arduino и его автообновление
Добрый день, имеется макет, которым нужно управлять с компьютера использую COM port с Arduino. Код для Arduino готов он работает, сама...

Автообновление окна в браузере (без подтверждений)
Доброго времени суток, помогите кто может. Есть такая проблема при обновлении страницы браузер требует подтверждение на обновление, а надо...

Автообновление списка файлов из папки на ФТП сервере
Не смог найти поиском, так что если повтор, извините. Имеется List элементы которого - это файлы из папки на фтп сервере, в свою очередь...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru