View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000418 | SAS.Планета | Хотелка / Feature request | public | 22-02-2011 06:39 | 30-12-2021 08:58 |
| Reporter | Sneaky Pete | Assigned To | |||
| Priority | none | Severity | tweak | Reproducibility | always |
| Status | confirmed | Resolution | open | ||
| Platform | Windows | OS | 7 | OS Version | Ultimate |
| Product Version | 110216 | ||||
| Target Version | 42xxxx | ||||
| Summary | 0000418: Автоматическое обновление SAS.Планета | ||||
| Description | Хотелось бы, чтобы был реализован способ автоматического поиска обновления программы с сайта. Загрузка. Обновление. Как, к примеру, это реализовано в Скайпе. Было бы дико удобно, учитывая тот факт, что обновления очень часто появляются. | ||||
| Tags | обновление, репозиторий | ||||
| Attached Files | |||||
|
|
Очень часто? Раз в 3-4 месяца это часто? Шутник, однако. |
|
|
Версия 110216 (16.02.2011) Версия 101206 (06.12.2010) Речи о 3-4 месяцах нет. Два месяца - уже часто. Скайп реже обновляется, а все-таки предусмотрено. Да таких прог тьма, которые сами смотрят на обновление. |
|
|
>чтобы был реализован способ автоматического поиска обновления программы с сайта Нет ничего проще, достаточно выкладывать актуальную версию по фиксированному адресу, и ничего искать не надо, автообновлялка пишется простым батником. И вообще есть стойкое ощущение, что автообновление обсуждаемой программы либо бессмысленно, либо даже вредно (в зависимости от возможной реализации). Всё равно для нормального использования программы необходимо часто появляться на форуме, следить за изменениями в сервисах, и это будет куда чаще, чем выходят обновления программы. |
|
|
А в чем вредоносность? Перезаписывать основные файлы, не трогая кэш... При желании еще и версии карт. Ну и потом, никто не насилует - не хочешь, не соглашайся на обновление. |
|
|
Вредность в непрозрачности обновления zmp. На каждый zmp есть пользовательские настройки, что предлагаете с ними делать? Там по каждой опции такая тьма вопросов, что в настройках автообновления можно утонуть с концами. Даже на тему добавления в программу новых zmp в момент автообновления можно сломать столько копий, что мало не покажется. А если вообще не обновлять zmp, то смысла в автообновлении ноль без палочки. И вообще начинать тему автообновления надо с автообновления (причём без перезапуска программы) именно дефолтных настроек доступа к сервисам, в чём действительно есть смысл, а не с автоматической скачки одной простой EXEхи. |
|
|
На мой взгляд, автообновление ни программы, ни zmp не нужно. Потому что программа находится и будет ещё долго находиться в процессе разработки, зачастую в новых версиях то, что работало в старых, не работает. Так не лучше ли иметь у себя скачанные дистрибутивы и, в случае чего просто перекинуть в папку несколько файлов(а чаще один)? Папку maps надо вообще обновлять с большой осторожностью, особенно если там zmp с внесёнными вами изменениями. Например, у меня все zmp - это архивы, а не папки, и я хочу, чтобы все карты/снимки/слои с одного сервиса лежали в одном родительском пункте меню. Программа сортирует zmp по параметру AsLayer, а мне этого не нужно. Кроме как присвоить им нужные pnum, другого способа так сделать нет. Ну и всё в том же духе. Как я могу обновить всё это автоматически? |
|
|
Ну поэтому приоритет и низкий, что есть смысл задуматься об этом при выпуске уже финального релиза. |
|
|
а как такой вариант 1. Скачивает файлы обновления прямо с сайта. 2. Разархивирует эти файлы. 3. Заменяет старые файлы новыми. В принципе все очень просто и код понятный… Для использования создайте файл http://mysite.ru/myprogram/update.txt на вашем сайте. В нем напишите следующие строки : 1.0.0.1 http://mysite.ru/myprogram/updater.exe.gz http://mysite.ru/myprogram/myprogram.exe.gz Первая строчка – номер самой свежей версии Вторая строчка – ссылка на программу самообновления Третья строчка и все последующие – это файлы для обновления. using System; using System.Net; using System.Windows.Forms; using System.IO; using System.Reflection; using System.Diagnostics; namespace SelfUpdate { static class Program { [STAThread] static void Main(string[] args) { if (File.Exists("updater.exe")) //Проверяем на остатки от процесса обновления { System.Threading.Thread.Sleep(2000); //Спим 2 секунды, пока обновлялка закроется File.Delete("updater.exe"); //Удаляем обновлялку } WebClient wc = new WebClient(); //Через ВебКлиент мы скачиваем файлы const string updatestring = "http://mysite.ru/myprogram/update.txt"; //Это фиксированная ссылка на сайт, где лежит txt-файл с данными для обновления const string updatername = "updater.exe"; //Тоже фиксированное имя обновлялки Stream stream = null; try{stream = wc.OpenRead(updatestring);} //Пытаемся скачать txtшник. Он считывается не в файл, а обрабатывается прямо в памяти. catch{ goto normalstart; } //Если не удалось типа инет лагает, то просто грузим текущую версию проги StreamReader read = new StreamReader(stream); //Читалка текста в потоках string newversion = read.ReadLine(); //Читаем первую строчку string updater = read.ReadLine(); //Читаем вторую строчку string[] separator = { "\r\n" }; //Enter - на самом деле выглядит так =) string[] fileblowfiles = read.ReadToEnd().Split(separator, StringSplitOptions.RemoveEmptyEntries); //Получаем все остальные строчки разделенные Enter'ами read.Close(); //Закрываем потоки string version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); //Этот метод получает версию текущей сборки. Т.е. версию вашей программы (Допустим она 1.0.0.0) if (newversion != version) // Если версии не совпадают - значит прога устарела. Обновляем! { string file = updatername; stream = wc.OpenRead(updater); //Скачиваем и распаковываем ссылку на updater.exe unzip.UnZip(stream, file); stream.Close(); foreach (string fileblowfile in fileblowfiles) //Далее просто выкачиваем все остальные файлы. Думаю необходимости проверки их доступности нет. Ведь мы уже проверили update.txt на доступность через интернет. Но можно проделать то же самое и с каждый файлом при необходимости. { file = fileblowfile.Substring(fileblowfile.LastIndexOf('/') + 1); // превращает "http://mysite.ru/myprogram/myprogram.exe.gz" в "myprogram.exe.gz" wc.DownloadFile(fileblowfile, file); //скачивает файл } wc.Dispose(); //убиваем качалку Process.Start(updatername); //запускаем только что распакованный updater.exe return; //Немедленно выходим из нашей программы } normalstart: //Метка на которую переходим, если инет не работает или упал наш сайт. Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SimpleForm()); } } } Вот метод UnZip, который распаковывает данные из потока в файлusing System; using System.IO; using System.IO.Compression; namespace SelfUpdate { class unzip { internal static void CopyStream(Stream from, Stream to) { byte[] buffer = new byte[1024]; short count = -1; while (count != 0) { count = (short)from.Read(buffer, 0, buffer.Length); to.Write(buffer, 0, count); } } internal static void UnZip(Stream inputStream, string outputFile) { using (FileStream write = File.Create(outputFile)) using (GZipStream unzip = new GZipStream(inputStream, CompressionMode.Decompress)) { CopyStream(unzip, write); } } } } И в самой программе пишем следующий код :using System; using System.Net; using System.IO; using System.Diagnostics; namespace SelfUpdate { static class Program { [STAThread] static void Main(string[] args) { if (!File.Exists("myprogram.exe")) return; //Если рядом нет нашей основной проги, то возможно кто-то просто случайно её запустил))) выходим =) for (int i = 0; i < 5; i++) //5 раз пытаемся удалить основной файл { System.Threading.Thread.Sleep(2000); //Спим 2 секунды. try { File.Delete("myprogram.exe"); break; } //Попытка удалить файл. catch { ; } } string[] files = Directory.GetFiles(Environment.CurrentDirectory, "*.gz", SearchOption.TopDirectoryOnly); //Получаем все файлы в текущей папке с расширением ".gz" foreach (string file in files) //Для каждого такого файла делаем... { Stream stream = File.OpenRead(file); //Открываем файл для чтения unzip.UnZip(stream, Path.ChangeExtension(file, null)); //Распаковываем в файл с таким же именем, только убираем расширение ".gz" stream.Close(); File.Delete(file); //Закрываем поток и удаляем уже ненужный архив. } //После того как все архивы распаковали. В том числе и основной файл, то... Process.Start("myprogram.exe"); //Запускаем уже новую версию нашей основной программы. } } } |
|
|
упер тут http://denov.ru/?cat=206 |
|
|
Прежде чем говорить об автообновлении, надо прикрутить нормальный инсталлятор, который умеет аккуратно делать обновления (распаковывать новые файлы, не портя *.ini, *.sml, zmp пользователя и прочее). |
|
|
А по-моему, для SAS достаточным будет лишь автоматическая проверка текущей версии у пользователя и на сервере. Скажем, при загрузке программы и с интервалом в 1 день. При появлении обновлений на сервере - показывать юзеру один раз сообщение, что доступна новая версия (+ можно список изменений) и дать ему ссылку на скачивание. А дальше он уже сам пускай разбирается: обновляться или нет. Имхо, самый оптимальный вариант. И как вариант, в будущем, по указанной ссылке может лежать не архив с SAS, а веб-инсталлятор, который уже и будет заботиться о корректной загрузке и установке новой версии SAS поверх текущей. А уже веб-инсталяшку сможет написать любой энтузиаст. |
|
|
Tolik, а где вы видели в новых версиях программы *.ini, *.sml ? |
|
|
Во всех версиях _появляются_ во время работы: Categorymarks.sml marks.sml SASPlanet.ini Maps\Maps.ini |
|
|
Tolik так обновление и не трогало никогда файлы настроек и меток... |
|
|
Не надобно нам такого счасть типо автобновления самой программы. Нужен менеджер версий. пусть разные версии хранятся в одной папке и запускаются по выбору дополнительным лоадером. тогда не придется судорожно искать версию, работающую с полигонами корректно, если вместо нее скачана глючная альфа. Рад за тех, кого обошла стороной проблема с полигонами, решавшаяся аж полгода в 5 новых версиях, пока наконец не заработала..... Кстати в основной папке до сих пор храню 100707, другие на всякий случай подальше, лиш кеш прописываю.... |
|
|
При чём тут альфа? Альфа по определению глючная. И автообновления на альфу быть не может. А по теме - согласен, не нужно автообновление. И даже автопроверялка обновлений не нужна. Впрочем, никто и не собирается её писать в обозримом будущем, так что обсуждать тут нечего. |
|
|
Частично реализовал: в меню Помощь в завтрашней ночнушке появится пункт "Check Updates..." по которому открывается окошко и ищется свежая версия. Если версия нашлась, то есть возможность тут же её скачать (путём нажатия одной кнопки). По-умолчанию загруженный архив сохранится в папку Updates в папке с программой. Этот путь можно менять через ini: [PATHtoUpdates] PrimaryPath=.\Updates Таким образом пока что можно качать только ночнушки. |
|
|
Только скачать? Распаковывать и копировать файлы придётся вручную? Она хоть скажет, куда скачала? |
|
|
Три раза Да. |
|
|
Работает, только в диалог боксе не видно, куда именно скачалось (см. скриншот). |
|
|
Гм, а у меня не заработало. Новую версию обнаружило, но пишет "Unknown status code 302". Не скачивает. |
|
|
Странно, 302 - редирект и там в качалке явно указано, чтобы оно по ним автоматически ходило. Собственно, ссылку на закачку мы всегда получаем через редирект, в том числе и в браузере. |
|
|
Через браузер тоже не качается. |
|
|
И кто блокирует соединение? Антивирус? |
|
|
Да вот не говорит он ничего про это. Если через браузер, пишет, что соединение закрыто сервером. Только у меня, что ли? |
|
|
>Только у меня, что ли? Похоже на то. У меня отлично скачивает. |
|
|
Поотключал всё, что можно. Через браузер скачивается. Через SASПланету - нет. Код ошибки 302 (да вроде это и не ошибка, а предупреждение). Как ловить-то? |
|
|
Браузер браузеру рознь. Нужно чтобы IE качал. |
|
|
IE - это полный... ППЦ! Он мне пишет, что "Указанное в сертификате название неправильно или не совпадает с названием узла". При нажатии "Продолжить" получается "Невозможно отобразить страницу". Ну, может и невозможно её отобразить, так ведь и по "Сохранить как..." тоже не получается. Вообще я замечаю, что доступ к этому файлу не всегда открыт. Вот сегодня раза три я его скачал (через Oper'у и качалку), а потом всё. Не банят там? |
|
|
У меня так и не работает. Вложил лог обмена (Proxomitron), может, прояснит что? |
|
|
> Вложил лог обмена (Proxomitron) Архив битый. И лучше лог делать не проксей, а снифером. |
|
|
Сейчас скачал этот архив, всё ОК. Насчёт снифера да, только нет под рукой сейчас. На всяк случай продублирую текстом, что в логе (первый запрос опускаю): +++RESP 1+++ HTTP/1.0 200 OK Server: nginx/1.0.15 Date: Sat, 11 Jan 2014 06:31:11 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Refresh: 1; URL=https://dl.bintray.com./zed/SASPlanet/SAS.Planet.Nightly.140111.7796.7z X-Powered-By: PleskLin Content-Encoding: gzip Match 1: Stop browser window resizing Match 1: Kill pop-up windows Match 1: Suppress all JavaScript errors <end> 1: Reset page events {^sites} [RT] <end> 1: Restore pop-ups after a page loads +++CLOSE 1+++ +++GET 2+++ CONNECT / HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0;; .NET CLR 2.0.50727) Host: dl.bintray.com. Content-Length: 0 Proxy-Connection: Keep-Alive Pragma: no-cache Referer: https://dl.bintray.com.:443/ Accept-Charset: windows-1251, cp-1251 Accept-encoding: gzip, deflate +++SSL 2:+++ SSL Pass-Thru: CONNECT https://dl.bintray.com.:443/ Connection Time-Out: 1 Я слабо разбираюсь в http, но подозрительно это: https://dl.bintray.com.:443/ |
|
|
Упс, в скрипте nightly.php опечатка вышла - после dl.bintray.com стоит точка, а её там быть не должно. Удивительно, что некоторые версии wininet (видимо более новые) таки справляются с такими ошибками. |
|
|
>в скрипте nightly.php опечатка вышла Пробуйте щас. |
|
|
В какой ночнушке исправлено? Сейчас у меня 7797. |
|
|
Исправлено на сайте. Ночнушка получает адрес от nightly.php - это тот же скрипт, что и отдаёт архив при загрузке со странички в браузере. |
|
|
Дошло. Всё равно не работает. Что с точкой, что без неё. Чем воспользоваться, чтобы отловить, где проблема? |
|
|
Попробуйте взять нормальный снифер вроде Microsoft Network Monitor и собрать лог запросов. Проверьте свой фаервол и антивирус, возможно они блокируют соединения, обновите IE, по возможности не используйте никаких прокси. |
|
|
Вот взял я этот снифер, собрал лог. Файрвол и антивирус не блокируют соединение, по крайней мере сторонними программами я скачивать ночнушки могу без проблем. До чего обновлять IE? Прокси не используются. |
|
|
> сторонними программами я скачивать ночнушки могу без проблем Так IE ночнушки качает или нет? Если он не качает, то ничем помочь не могу. Ковыряйте его настройки. |
|
|
Всё, проблема решена. Причин было сразу две: 1. IE, который пришлось обновить, при этом ошибка 302 пропала. Однако, архив начинал скачиваться, но затем возникало сообщение о разрыве соединения с сервером, и файл не сохранялся по причине 2. И всё-таки антивирус, настойчиво блокирующий SASPlanet.Debug.exe. Пока не прописал в исключения http://966b.http.dal05.cdn.softlayer.net/*, никак не получалось. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 22-02-2011 06:39 | Sneaky Pete | New Issue | |
| 22-02-2011 07:48 | vdemidov | Note Added: 0001035 | |
| 22-02-2011 10:09 | Sneaky Pete | Note Added: 0001038 | |
| 22-02-2011 10:28 | vasketsov | Note Added: 0001039 | |
| 22-02-2011 10:45 | Sneaky Pete | Note Added: 0001041 | |
| 22-02-2011 11:32 | vasketsov | Note Added: 0001045 | |
| 22-02-2011 12:14 | Papazol | Note Added: 0001047 | |
| 23-02-2011 07:44 | Sneaky Pete | Note Added: 0001054 | |
| 23-02-2011 08:17 | vdemidov | Status | new => acknowledged |
| 23-02-2011 08:17 | vdemidov | Target Version | => 50xxxx |
| 20-03-2011 18:09 | dumpy | Note Added: 0001316 | |
| 20-03-2011 18:13 | dumpy | Note Added: 0001317 | |
| 20-03-2011 18:19 | dumpy | Note Edited: 0001317 | |
| 20-03-2011 18:20 | dumpy | Note Edited: 0001317 | |
| 20-03-2011 19:25 | Tolik | Note Added: 0001319 | |
| 20-03-2011 22:30 | gpsMax | Tag Attached: обновление | |
| 20-03-2011 22:30 | gpsMax | Tag Attached: репозиторий | |
| 21-03-2011 05:40 | zed | Note Added: 0001320 | |
| 21-03-2011 05:41 | zed | Note Edited: 0001320 | |
| 21-03-2011 05:45 | zed | Note Edited: 0001320 | |
| 21-03-2011 06:36 | dumpy | Note Added: 0001321 | |
| 21-03-2011 06:41 | Tolik | Note Added: 0001322 | |
| 21-03-2011 13:33 | dumpy | Note Added: 0001324 | |
| 25-03-2011 18:53 | DJ VK | Note Added: 0001397 | |
| 25-03-2011 18:56 | DJ VK | Note Edited: 0001397 | |
| 25-03-2011 20:21 | Tolik | Note Added: 0001399 | |
| 06-04-2011 21:54 | gpsMax | Description Updated | |
| 11-04-2011 07:12 | vdemidov | Status | acknowledged => confirmed |
| 06-06-2011 21:33 | gpsMax | Priority | low => none |
| 03-08-2012 08:36 | vdemidov | Relationship added | has duplicate 0001442 |
| 27-12-2013 20:52 | zed | Note Added: 0013450 | |
| 30-12-2013 07:30 | Tolik | Note Added: 0013466 | |
| 30-12-2013 12:37 | zed | Note Added: 0013467 | |
| 07-01-2014 08:48 | Tolik | File Added: 2014-01-07_124741.png | |
| 07-01-2014 08:49 | Tolik | Note Added: 0013498 | |
| 07-01-2014 13:37 | Papazol | Note Added: 0013499 | |
| 07-01-2014 14:31 | zed | Note Added: 0013501 | |
| 07-01-2014 18:59 | Papazol | Note Added: 0013502 | |
| 08-01-2014 04:34 | zed | Note Added: 0013503 | |
| 08-01-2014 06:46 | Papazol | Note Added: 0013507 | |
| 08-01-2014 07:55 | vdemidov | Note Added: 0013510 | |
| 08-01-2014 09:02 | Papazol | Note Added: 0013511 | |
| 08-01-2014 10:22 | zed | Note Added: 0013512 | |
| 08-01-2014 10:37 | Papazol | Note Added: 0013516 | |
| 11-01-2014 06:41 | Papazol | File Added: Лог.zip | |
| 11-01-2014 06:43 | Papazol | Note Added: 0013534 | |
| 11-01-2014 12:34 | zed | Note Added: 0013537 | |
| 11-01-2014 14:29 | Papazol | Note Added: 0013538 | |
| 11-01-2014 14:31 | Papazol | Note Edited: 0013538 | |
| 11-01-2014 16:44 | zed | Note Added: 0013539 | |
| 13-01-2014 15:31 | Parasite | Note Added: 0013592 | |
| 15-01-2014 16:29 | Papazol | Note Added: 0013632 | |
| 15-01-2014 16:42 | zed | Note Added: 0013634 | |
| 15-01-2014 17:24 | Papazol | Note Added: 0013635 | |
| 16-01-2014 11:27 | zed | Note Added: 0013638 | |
| 17-01-2014 13:35 | Papazol | Note Added: 0013639 | |
| 17-01-2014 13:36 | Papazol | File Added: Capture.zip | |
| 17-01-2014 13:47 | zed | Note Added: 0013640 | |
| 18-01-2014 20:08 | Papazol | Note Added: 0013647 | |
| 03-03-2014 18:18 | zed | Relationship added | related to 0002348 |
| 06-03-2015 14:44 | zed | Assigned To | => zed |
| 06-03-2015 14:44 | zed | Status | confirmed => assigned |
| 06-03-2015 14:45 | zed | Target Version | 50xxxx => 150915 |
| 16-09-2015 14:52 | vdemidov | Target Version | 150915 => 151010 |
| 10-10-2015 15:33 | vdemidov | Target Version | 151010 => 151111 |
| 06-11-2015 08:19 | vdemidov | Target Version | 151111 => 191221 |
| 11-05-2016 08:14 | zed | Assigned To | zed => |
| 11-05-2016 08:14 | zed | Status | assigned => confirmed |
| 23-07-2019 16:56 | vdemidov | Target Version | 191221 => 211230 |
| 30-12-2021 08:58 | zed | Target Version | 211230 => 42xxxx |
| 08-08-2025 13:24 | zed | Category | Хотелка => Хотелка / Feature request |