SASGIS - SAS.Планета
View Issue Details
0000418SAS.Планета[All Projects] Хотелкаpublic22-02-2011 06:3930-12-2021 08:58
Sneaky Pete 
 
nonetweakalways
confirmedopen 
Windows7Ultimate
110216 
26xxxx 
0000418: Автоматическое обновление SAS.Планета
Хотелось бы, чтобы был реализован способ автоматического поиска обновления программы с сайта. Загрузка. Обновление.
Как, к примеру, это реализовано в Скайпе. Было бы дико удобно, учитывая тот факт, что обновления очень часто появляются.
обновление, репозиторий
has duplicate 0001442closed vdemidov Авто обновление 
related to 0002348resolved zed Не скачивает релиз 
png 2014-01-07_124741.png (24,423) 07-01-2014 08:48
https://bugtracker.sasgis.org/file_download.php?file_id=1643&type=bug
png

zip Лог.zip (1,597) 11-01-2014 06:41
https://bugtracker.sasgis.org/file_download.php?file_id=1645&type=bug
zip Capture.zip (10,937) 17-01-2014 13:36
https://bugtracker.sasgis.org/file_download.php?file_id=1658&type=bug
Issue History
22-02-2011 06:39Sneaky PeteNew Issue
22-02-2011 07:48vdemidovNote Added: 0001035
22-02-2011 10:09Sneaky PeteNote Added: 0001038
22-02-2011 10:28vasketsovNote Added: 0001039
22-02-2011 10:45Sneaky PeteNote Added: 0001041
22-02-2011 11:32vasketsovNote Added: 0001045
22-02-2011 12:14PapazolNote Added: 0001047
23-02-2011 07:44Sneaky PeteNote Added: 0001054
23-02-2011 08:17vdemidovStatusnew => acknowledged
23-02-2011 08:17vdemidovTarget Version => 50xxxx
20-03-2011 18:09dumpyNote Added: 0001316
20-03-2011 18:13dumpyNote Added: 0001317
20-03-2011 18:19dumpyNote Edited: 0001317bug_revision_view_page.php?bugnote_id=1317#r369
20-03-2011 18:20dumpyNote Edited: 0001317bug_revision_view_page.php?bugnote_id=1317#r370
20-03-2011 19:25TolikNote Added: 0001319
20-03-2011 22:30gpsMaxTag Attached: обновление
20-03-2011 22:30gpsMaxTag Attached: репозиторий
21-03-2011 05:40zedNote Added: 0001320
21-03-2011 05:41zedNote Edited: 0001320bug_revision_view_page.php?bugnote_id=1320#r374
21-03-2011 05:45zedNote Edited: 0001320bug_revision_view_page.php?bugnote_id=1320#r375
21-03-2011 06:36dumpyNote Added: 0001321
21-03-2011 06:41TolikNote Added: 0001322
21-03-2011 13:33dumpyNote Added: 0001324
25-03-2011 18:53DJ VKNote Added: 0001397
25-03-2011 18:56DJ VKNote Edited: 0001397bug_revision_view_page.php?bugnote_id=1397#r394
25-03-2011 20:21TolikNote Added: 0001399
06-04-2011 21:54gpsMaxDescription Updatedbug_revision_view_page.php?rev_id=527#r527
11-04-2011 07:12vdemidovStatusacknowledged => confirmed
06-06-2011 21:33gpsMaxPrioritylow => none
03-08-2012 08:36vdemidovRelationship addedhas duplicate 0001442
27-12-2013 20:52zedNote Added: 0013450
30-12-2013 07:30TolikNote Added: 0013466
30-12-2013 12:37zedNote Added: 0013467
07-01-2014 08:48TolikFile Added: 2014-01-07_124741.png
07-01-2014 08:49TolikNote Added: 0013498
07-01-2014 13:37PapazolNote Added: 0013499
07-01-2014 14:31zedNote Added: 0013501
07-01-2014 18:59PapazolNote Added: 0013502
08-01-2014 04:34zedNote Added: 0013503
08-01-2014 06:46PapazolNote Added: 0013507
08-01-2014 07:55vdemidovNote Added: 0013510
08-01-2014 09:02PapazolNote Added: 0013511
08-01-2014 10:22zedNote Added: 0013512
08-01-2014 10:37PapazolNote Added: 0013516
10-01-2014 16:52gmaNote Added: 0013532
10-01-2014 16:55gmaNote Deleted: 0013532
11-01-2014 06:41PapazolFile Added: Лог.zip
11-01-2014 06:43PapazolNote Added: 0013534
11-01-2014 12:34zedNote Added: 0013537
11-01-2014 14:29PapazolNote Added: 0013538
11-01-2014 14:31PapazolNote Edited: 0013538bug_revision_view_page.php?bugnote_id=13538#r5899
11-01-2014 16:44zedNote Added: 0013539
13-01-2014 15:31ParasiteNote Added: 0013592
15-01-2014 16:29PapazolNote Added: 0013632
15-01-2014 16:42zedNote Added: 0013634
15-01-2014 17:24PapazolNote Added: 0013635
16-01-2014 11:27zedNote Added: 0013638
17-01-2014 13:35PapazolNote Added: 0013639
17-01-2014 13:36PapazolFile Added: Capture.zip
17-01-2014 13:47zedNote Added: 0013640
18-01-2014 20:08PapazolNote Added: 0013647
03-03-2014 18:18zedRelationship addedrelated to 0002348
06-03-2015 14:44zedAssigned To => zed
06-03-2015 14:44zedStatusconfirmed => assigned
06-03-2015 14:45zedTarget Version50xxxx => 150915
16-09-2015 14:52vdemidovTarget Version150915 => 151010
10-10-2015 15:33vdemidovTarget Version151010 => 151111
06-11-2015 08:19vdemidovTarget Version151111 => 191221
11-05-2016 08:14zedAssigned Tozed =>
11-05-2016 08:14zedStatusassigned => confirmed
23-07-2019 16:56vdemidovTarget Version191221 => 211230
30-12-2021 08:58zedTarget Version211230 => 26xxxx

Notes
(0001035)
vdemidov   
22-02-2011 07:48   
Очень часто? Раз в 3-4 месяца это часто? Шутник, однако.
(0001038)
Sneaky Pete   
22-02-2011 10:09   
Версия 110216 (16.02.2011)
Версия 101206 (06.12.2010)

Речи о 3-4 месяцах нет. Два месяца - уже часто.

Скайп реже обновляется, а все-таки предусмотрено. Да таких прог тьма, которые сами смотрят на обновление.
(0001039)
vasketsov   
22-02-2011 10:28   
>чтобы был реализован способ автоматического поиска обновления программы с сайта
Нет ничего проще, достаточно выкладывать актуальную версию по фиксированному адресу, и ничего искать не надо, автообновлялка пишется простым батником.

И вообще есть стойкое ощущение, что автообновление обсуждаемой программы либо бессмысленно, либо даже вредно (в зависимости от возможной реализации). Всё равно для нормального использования программы необходимо часто появляться на форуме, следить за изменениями в сервисах, и это будет куда чаще, чем выходят обновления программы.
(0001041)
Sneaky Pete   
22-02-2011 10:45   
А в чем вредоносность? Перезаписывать основные файлы, не трогая кэш... При желании еще и версии карт. Ну и потом, никто не насилует - не хочешь, не соглашайся на обновление.
(0001045)
vasketsov   
22-02-2011 11:32   
Вредность в непрозрачности обновления zmp. На каждый zmp есть пользовательские настройки, что предлагаете с ними делать? Там по каждой опции такая тьма вопросов, что в настройках автообновления можно утонуть с концами. Даже на тему добавления в программу новых zmp в момент автообновления можно сломать столько копий, что мало не покажется. А если вообще не обновлять zmp, то смысла в автообновлении ноль без палочки.
И вообще начинать тему автообновления надо с автообновления (причём без перезапуска программы) именно дефолтных настроек доступа к сервисам, в чём действительно есть смысл, а не с автоматической скачки одной простой EXEхи.
(0001047)
Papazol   
22-02-2011 12:14   
На мой взгляд, автообновление ни программы, ни zmp не нужно. Потому что программа находится и будет ещё долго находиться в процессе разработки, зачастую в новых версиях то, что работало в старых, не работает. Так не лучше ли иметь у себя скачанные дистрибутивы и, в случае чего просто перекинуть в папку несколько файлов(а чаще один)?
Папку maps надо вообще обновлять с большой осторожностью, особенно если там zmp с внесёнными вами изменениями. Например, у меня все zmp - это архивы, а не папки, и я хочу, чтобы все карты/снимки/слои с одного сервиса лежали в одном родительском пункте меню. Программа сортирует zmp по параметру AsLayer, а мне этого не нужно. Кроме как присвоить им нужные pnum, другого способа так сделать нет. Ну и всё в том же духе. Как я могу обновить всё это автоматически?
(0001054)
Sneaky Pete   
23-02-2011 07:44   
Ну поэтому приоритет и низкий, что есть смысл задуматься об этом при выпуске уже финального релиза.
(0001316)
dumpy   
20-03-2011 18:09   
а как такой вариант

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"); //Запускаем уже новую версию нашей основной программы.

        }

    }

}
(0001317)
dumpy   
20-03-2011 18:13   
(edited on: 20-03-2011 18:20)
упер тут
http://denov.ru/?cat=206

(0001319)
Tolik   
20-03-2011 19:25   
Прежде чем говорить об автообновлении, надо прикрутить нормальный инсталлятор, который умеет аккуратно делать обновления (распаковывать новые файлы, не портя *.ini, *.sml, zmp пользователя и прочее).
(0001320)
zed   
21-03-2011 05:40   
(edited on: 21-03-2011 05:45)
А по-моему, для SAS достаточным будет лишь автоматическая проверка текущей версии у пользователя и на сервере. Скажем, при загрузке программы и с интервалом в 1 день. При появлении обновлений на сервере - показывать юзеру один раз сообщение, что доступна новая версия (+ можно список изменений) и дать ему ссылку на скачивание. А дальше он уже сам пускай разбирается: обновляться или нет.
Имхо, самый оптимальный вариант.

И как вариант, в будущем, по указанной ссылке может лежать не архив с SAS, а веб-инсталлятор, который уже и будет заботиться о корректной загрузке и установке новой версии SAS поверх текущей. А уже веб-инсталяшку сможет написать любой энтузиаст.

(0001321)
dumpy   
21-03-2011 06:36   
Tolik, а где вы видели в новых версиях программы *.ini, *.sml ?
(0001322)
Tolik   
21-03-2011 06:41   
Во всех версиях _появляются_ во время работы:
Categorymarks.sml
marks.sml
SASPlanet.ini
Maps\Maps.ini
(0001324)
dumpy   
21-03-2011 13:33   
Tolik
так обновление и не трогало никогда файлы настроек и меток...
(0001397)
DJ VK   
25-03-2011 18:53   
(edited on: 25-03-2011 18:56)
Не надобно нам такого счасть типо автобновления самой программы. Нужен менеджер версий. пусть разные версии хранятся в одной папке и запускаются по выбору дополнительным лоадером. тогда не придется судорожно искать версию, работающую с полигонами корректно, если вместо нее скачана глючная альфа. Рад за тех, кого обошла стороной проблема с полигонами, решавшаяся аж полгода в 5 новых версиях, пока наконец не заработала.....
Кстати в основной папке до сих пор храню 100707, другие на всякий случай подальше, лиш кеш прописываю....

(0001399)
Tolik   
25-03-2011 20:21   
При чём тут альфа? Альфа по определению глючная. И автообновления на альфу быть не может.
А по теме - согласен, не нужно автообновление. И даже автопроверялка обновлений не нужна.
Впрочем, никто и не собирается её писать в обозримом будущем, так что обсуждать тут нечего.
(0013450)
zed   
27-12-2013 20:52   
Частично реализовал: в меню Помощь в завтрашней ночнушке появится пункт "Check Updates..." по которому открывается окошко и ищется свежая версия. Если версия нашлась, то есть возможность тут же её скачать (путём нажатия одной кнопки).

По-умолчанию загруженный архив сохранится в папку Updates в папке с программой. Этот путь можно менять через ini:

[PATHtoUpdates]
PrimaryPath=.\Updates

Таким образом пока что можно качать только ночнушки.
(0013466)
Tolik   
30-12-2013 07:30   
Только скачать? Распаковывать и копировать файлы придётся вручную? Она хоть скажет, куда скачала?
(0013467)
zed   
30-12-2013 12:37   
Три раза Да.
(0013498)
Tolik   
07-01-2014 08:49   
Работает, только в диалог боксе не видно, куда именно скачалось (см. скриншот).
(0013499)
Papazol   
07-01-2014 13:37   
Гм, а у меня не заработало. Новую версию обнаружило, но пишет "Unknown status code 302". Не скачивает.
(0013501)
zed   
07-01-2014 14:31   
Странно, 302 - редирект и там в качалке явно указано, чтобы оно по ним автоматически ходило. Собственно, ссылку на закачку мы всегда получаем через редирект, в том числе и в браузере.
(0013502)
Papazol   
07-01-2014 18:59   
Через браузер тоже не качается.
(0013503)
zed   
08-01-2014 04:34   
И кто блокирует соединение? Антивирус?
(0013507)
Papazol   
08-01-2014 06:46   
Да вот не говорит он ничего про это. Если через браузер, пишет, что соединение закрыто сервером. Только у меня, что ли?
(0013510)
vdemidov   
08-01-2014 07:55   
>Только у меня, что ли?
Похоже на то. У меня отлично скачивает.
(0013511)
Papazol   
08-01-2014 09:02   
Поотключал всё, что можно. Через браузер скачивается. Через SASПланету - нет. Код ошибки 302 (да вроде это и не ошибка, а предупреждение). Как ловить-то?
(0013512)
zed   
08-01-2014 10:22   
Браузер браузеру рознь. Нужно чтобы IE качал.
(0013516)
Papazol   
08-01-2014 10:37   
IE - это полный... ППЦ! Он мне пишет, что "Указанное в сертификате название неправильно или не совпадает с названием узла". При нажатии "Продолжить" получается "Невозможно отобразить страницу". Ну, может и невозможно её отобразить, так ведь и по "Сохранить как..." тоже не получается. Вообще я замечаю, что доступ к этому файлу не всегда открыт. Вот сегодня раза три я его скачал (через Oper'у и качалку), а потом всё. Не банят там?
(0013534)
Papazol   
11-01-2014 06:43   
У меня так и не работает. Вложил лог обмена (Proxomitron), может, прояснит что?
(0013537)
zed   
11-01-2014 12:34   
> Вложил лог обмена (Proxomitron)
Архив битый. И лучше лог делать не проксей, а снифером.
(0013538)
Papazol   
11-01-2014 14:29   
(edited on: 11-01-2014 14:31)
Сейчас скачал этот архив, всё ОК. Насчёт снифера да, только нет под рукой сейчас. На всяк случай продублирую текстом, что в логе (первый запрос опускаю):
+++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/

(0013539)
zed   
11-01-2014 16:44   
Упс, в скрипте nightly.php опечатка вышла - после dl.bintray.com стоит точка, а её там быть не должно. Удивительно, что некоторые версии wininet (видимо более новые) таки справляются с такими ошибками.
(0013592)
Parasite   
13-01-2014 15:31   
>в скрипте nightly.php опечатка вышла
Пробуйте щас.
(0013632)
Papazol   
15-01-2014 16:29   
В какой ночнушке исправлено? Сейчас у меня 7797.
(0013634)
zed   
15-01-2014 16:42   
Исправлено на сайте. Ночнушка получает адрес от nightly.php - это тот же скрипт, что и отдаёт архив при загрузке со странички в браузере.
(0013635)
Papazol   
15-01-2014 17:24   
Дошло.
Всё равно не работает. Что с точкой, что без неё. Чем воспользоваться, чтобы отловить, где проблема?
(0013638)
zed   
16-01-2014 11:27   
Попробуйте взять нормальный снифер вроде Microsoft Network Monitor и собрать лог запросов. Проверьте свой фаервол и антивирус, возможно они блокируют соединения, обновите IE, по возможности не используйте никаких прокси.
(0013639)
Papazol   
17-01-2014 13:35   
Вот взял я этот снифер, собрал лог. Файрвол и антивирус не блокируют соединение, по крайней мере сторонними программами я скачивать ночнушки могу без проблем. До чего обновлять IE? Прокси не используются.
(0013640)
zed   
17-01-2014 13:47   
> сторонними программами я скачивать ночнушки могу без проблем
Так IE ночнушки качает или нет? Если он не качает, то ничем помочь не могу. Ковыряйте его настройки.
(0013647)
Papazol   
18-01-2014 20:08   
Всё, проблема решена. Причин было сразу две:
1. IE, который пришлось обновить, при этом ошибка 302 пропала. Однако, архив начинал скачиваться, но затем возникало сообщение о разрыве соединения с сервером, и файл не сохранялся по причине
2. И всё-таки антивирус, настойчиво блокирующий SASPlanet.Debug.exe. Пока не прописал в исключения http://966b.http.dal05.cdn.softlayer.net/*, никак не получалось.