Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
1

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

10.11.2013, 02:21. Показов 5796. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сделал апдейтер для программы, и сейчас вот дописываю поддержку обновления апдейтера. Проблема в финальной стадии, я не знаю как решить ее без стороннего простого приложения, которое при своем запуске поменять файлы местами и удалить некоторые из них. Сейчас я сделал так: в конце обновления новый файл именуется file_1.exe, далее запускается программа для замены файлов, а апдейтер закрывается. Программа для замены заменит file.exe на file_1.exe, и удалит последний. Вот как реализовать это без сторонней программы. В голову приходит только вынести функционал программы для замены в отдельный поток с задержкой, в майн потоке стартовать background поток, а саму программу закрывать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2013, 02:21
Ответы с готовыми решениями:

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

Автообновление
Итак столкнулся с такой проблемой. Моя программа обновляется практически каждый день(добавляются...

Автообновление службы ( сервиса )
Доброго времени суток уважаемые читатели ! Начал писать службу для обработки пакетов WebSocket...

Автообновление
возможно ли как то сделать чтобы через autoupdater с ftp качался не архив а папка содержащая в себе...

31
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
10.11.2013, 05:48 2
Да это нормальный вариант со сторонней программой.
Цитата Сообщение от Heisenberg Посмотреть сообщение
в майн потоке стартовать background поток, а саму программу закрывать.
А разве при закрытии программы этот самый поток не закроется вместе с программой? Нафига тебе этот гемор, со сторонней прогой тоже всё норм, главное, чтобы в ней не было косяков, так как у неё самая серьёзная роль - обновить апдейтер. Просто предусмотреть и протестить много ситуаций возможных. Я так делал.
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 05:51 3
Я сделал все в одной программе. Она загружает обнову, скидывает на диск, запускает ее с параметрами, сама закрывается. Обнова же удаляет старый файл становится на его место
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 11:51 4
Villain512, без сторонней программы - выгружать программу куда-нибудь и запускать её копию. Например нужно обновиться, копируем (или переносим экзешник в другую папку, например в папку обновления), после этого запускаем его оттуда. При запуске программы если она видит, что лежит в папке Update(или папке temp, как угодно), то вместо обычной работы начинает работу по перекопированию из папки Update всех файлов. Но все же лучше кидать прогу в temp под каким-нибудь рандомным именем. После этого папка Update удаляется и все. Другой вариант - если Update заменяет в том числе экзешник, то просто жамкаем на него и указываем путь к программе, он выполняет пункт №2 (то есть копирует все файлы, включая себя). А ваше намного проще делать так:

Обновление - это просто обычный установщик.
Программа скачивает установщик, запускает его, указывая путь к себе, а сама в этот момент зарывается.
Юзер кликает "далее->далее->готово". Установщик заменяет нужные файлы.
???????
PROFIT!
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 11:56 5
При запуске программы если она видит, что лежит в папке Update(или папке temp, как угодно), то вместо обычной работы начинает работу по перекопированию из папки Update всех файлов. Но все же лучше кидать прогу в temp под каким-нибудь рандомным именем. После этого папка Update удаляется и все. Другой вариант - если Update заменяет в том числе экзешник, то просто жамкаем на него и указываем путь к программе, он выполняет пункт №2 (то есть копирует все файлы, включая себя). А ваше намного проще делать так:
эм, дак я еще проще сделал, она сама себя запускает и передает нужные параметры (которые в мейне).
Написал класс который все это автоматом делает, в мейне к примеру его вызываем, передаем аргументы и все,
Правда от всех этих операций антивирусы начинают ругаться частенько, думают что червь.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 11:59 6
Villain512, ну я говорю, сделай обычный msi установщик, который и будет запускаться при обновлении, делов-то.
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 12:06 7
Да ну зачем, для меня это неудобно. Мне надо чтоб все на лету происходило, сам не люблю эти установщики и своим клиентам делать не стану

Добавлено через 4 минуты
Наличие установщика должно быть оправдано, бесит же когда какая-нибудь маленькая программа, с 3-5 файлами корчит из себя серьезный софт и требует чтоб ее установили, вместо того чтобы просто запустить с рабочего стола или еще откуда когда надо, и быстро удалить когда перестала быть нужна .
А если программа большая или с интеграцией типа вижуал студио и тд и тп, то да только в этом случае нужны установщики.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 12:21 8
Villain512, тогда отдельный апдейтер - стандартный ход, Который и в homm5 используется, и варкрафт/старкрафтом, и всеми ММОРПГ. Используй чужой good practice
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 12:23 9
А отдельный то зачем, если всего то достаточно вызывать метод из мейна?
0
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
10.11.2013, 12:32 10
Villain512, тогда скачивай WebClient'ом новую версию, удаляй ехешник старой программы, заменяй скачанным, открывай новый ехешник каким-нибудь Process.Start, закрывай себя и будет щастье. можно прям одной функцией сделать.
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 12:35 11
Да вы не мне помогайте а ТС, я все уже давным давно сделал и отладил
0
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
10.11.2013, 12:37 12
если в программе много файлов, пихай их на сервере обновлений в архив, скачивай архив, распаковывай каким нибудь DotNetZipLib и перетаскивай на место старых в папку с программой.

я так думаю.

Добавлено через 28 секунд
Villain512, хех, не заметил, бывает).
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 12:40 13
если в программе много файлов, пихай их на сервере обновлений в архив, скачивай архив, распаковывай каким нибудь DotNetZipLib и перетаскивай на место старых в папку с программой.
Я вот предпочитаю все в ресурсы запихивать, а если это либы, то у меня есть класс срабатывающий на асемблрезольв, просто задаем имя и ссылку на ресурс, он ее сам рядом выгружает когда надо.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 12:53 14
Цитата Сообщение от Villain512 Посмотреть сообщение
А отдельный то зачем, если всего то достаточно вызывать метод из мейна?
как ты заменишь файл, который уже выполняется? Ты не можешь его ни скопировать ни удалить.
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 12:55 15
как ты заменишь файл, который уже выполняется? Ты не можешь его ни скопировать ни удалить.
Новый запускается, старый закрывается. Во вторых исполняемые файлы можно перемещать даже если они открыты, что сокращает количество операций при автоапдейте.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 13:06 16
Villain512, копировать - можно, перемещать - нет.
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 13:09 17
C#
1
File.Move(Application.ExecutablePath, "1.exe");
Just do it!
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 13:31 18
Villain512, а винда, редиска, не дает
0
2 / 2 / 1
Регистрация: 19.01.2013
Сообщений: 155
10.11.2013, 13:33 19
Смысле? у меня пашет все. Может отладчик мешает?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2013, 13:49 20
Автообновление программы
0
10.11.2013, 13:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2013, 13:49
Помогаю со студенческими работами здесь

Автообновление БД из DataSet
Ситуация такова. Програмно обновляю DataSet из контрола (группы контролов). Интуитивно, по строению...

Автообновление DataGridView
Здравствуйте, есть datagridview, куда выводится таблица. Как сделать автообновление?private async...

Автообновление данных в Grid
Делаю многопользовательскую программу для учета. База SQL Server 2008. На главной форме у меня...

Некорректное автообновление datagrid
Доброго времени суток. Подскажите на ошибку в коде. делаю автообновление датагрида public...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru