SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000418SAS.Планета[All Projects] Хотелкаpublic22-02-2011 06:3930-12-2021 08:58
ReporterSneaky Pete 
Assigned To 
PrioritynoneSeveritytweakReproducibilityalways
StatusconfirmedResolutionopen 
PlatformWindowsOS7OS VersionUltimate
Product Version110216 
Target Version26xxxxFixed in Version 
Summary0000418: Автоматическое обновление SAS.Планета
DescriptionХотелось бы, чтобы был реализован способ автоматического поиска обновления программы с сайта. Загрузка. Обновление.
Как, к примеру, это реализовано в Скайпе. Было бы дико удобно, учитывая тот факт, что обновления очень часто появляются.
Tagsобновление, репозиторий
Attached Filespng file icon 2014-01-07_124741.png [^] (24,423 bytes) 07-01-2014 08:48


zip file icon Лог.zip [^] (1,597 bytes) 11-01-2014 06:41
zip file icon Capture.zip [^] (10,937 bytes) 17-01-2014 13:36

- Relationships
has duplicate 0001442closedvdemidov Авто обновление 
related to 0002348resolvedzed Не скачивает релиз 

-  Notes
(0001035)
vdemidov (manager)
22-02-2011 07:48

Очень часто? Раз в 3-4 месяца это часто? Шутник, однако.
(0001038)
Sneaky Pete (reporter)
22-02-2011 10:09

Версия 110216 (16.02.2011)
Версия 101206 (06.12.2010)

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

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

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

И вообще есть стойкое ощущение, что автообновление обсуждаемой программы либо бессмысленно, либо даже вредно (в зависимости от возможной реализации). Всё равно для нормального использования программы необходимо часто появляться на форуме, следить за изменениями в сервисах, и это будет куда чаще, чем выходят обновления программы.
(0001041)
Sneaky Pete (reporter)
22-02-2011 10:45

А в чем вредоносность? Перезаписывать основные файлы, не трогая кэш... При желании еще и версии карт. Ну и потом, никто не насилует - не хочешь, не соглашайся на обновление.
(0001045)
vasketsov (manager)
22-02-2011 11:32

Вредность в непрозрачности обновления zmp. На каждый zmp есть пользовательские настройки, что предлагаете с ними делать? Там по каждой опции такая тьма вопросов, что в настройках автообновления можно утонуть с концами. Даже на тему добавления в программу новых zmp в момент автообновления можно сломать столько копий, что мало не покажется. А если вообще не обновлять zmp, то смысла в автообновлении ноль без палочки.
И вообще начинать тему автообновления надо с автообновления (причём без перезапуска программы) именно дефолтных настроек доступа к сервисам, в чём действительно есть смысл, а не с автоматической скачки одной простой EXEхи.
(0001047)
Papazol (reporter)
22-02-2011 12:14

На мой взгляд, автообновление ни программы, ни zmp не нужно. Потому что программа находится и будет ещё долго находиться в процессе разработки, зачастую в новых версиях то, что работало в старых, не работает. Так не лучше ли иметь у себя скачанные дистрибутивы и, в случае чего просто перекинуть в папку несколько файлов(а чаще один)?
Папку maps надо вообще обновлять с большой осторожностью, особенно если там zmp с внесёнными вами изменениями. Например, у меня все zmp - это архивы, а не папки, и я хочу, чтобы все карты/снимки/слои с одного сервиса лежали в одном родительском пункте меню. Программа сортирует zmp по параметру AsLayer, а мне этого не нужно. Кроме как присвоить им нужные pnum, другого способа так сделать нет. Ну и всё в том же духе. Как я могу обновить всё это автоматически?
(0001054)
Sneaky Pete (reporter)
23-02-2011 07:44

Ну поэтому приоритет и низкий, что есть смысл задуматься об этом при выпуске уже финального релиза.
(0001316)
dumpy (reporter)
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 (reporter)
20-03-2011 18:13
edited on: 20-03-2011 18:20

упер тут
http://denov.ru/?cat=206

(0001319)
Tolik (manager)
20-03-2011 19:25

Прежде чем говорить об автообновлении, надо прикрутить нормальный инсталлятор, который умеет аккуратно делать обновления (распаковывать новые файлы, не портя *.ini, *.sml, zmp пользователя и прочее).
(0001320)
zed (manager)
21-03-2011 05:40
edited on: 21-03-2011 05:45

А по-моему, для SAS достаточным будет лишь автоматическая проверка текущей версии у пользователя и на сервере. Скажем, при загрузке программы и с интервалом в 1 день. При появлении обновлений на сервере - показывать юзеру один раз сообщение, что доступна новая версия (+ можно список изменений) и дать ему ссылку на скачивание. А дальше он уже сам пускай разбирается: обновляться или нет.
Имхо, самый оптимальный вариант.

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

(0001321)
dumpy (reporter)
21-03-2011 06:36

Tolik, а где вы видели в новых версиях программы *.ini, *.sml ?
(0001322)
Tolik (manager)
21-03-2011 06:41

Во всех версиях _появляются_ во время работы:
Categorymarks.sml
marks.sml
SASPlanet.ini
Maps\Maps.ini
(0001324)
dumpy (reporter)
21-03-2011 13:33

Tolik
так обновление и не трогало никогда файлы настроек и меток...
(0001397)
DJ VK (manager)
25-03-2011 18:53
edited on: 25-03-2011 18:56

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

(0001399)
Tolik (manager)
25-03-2011 20:21

При чём тут альфа? Альфа по определению глючная. И автообновления на альфу быть не может.
А по теме - согласен, не нужно автообновление. И даже автопроверялка обновлений не нужна.
Впрочем, никто и не собирается её писать в обозримом будущем, так что обсуждать тут нечего.
(0013450)
zed (manager)
27-12-2013 20:52

Частично реализовал: в меню Помощь в завтрашней ночнушке появится пункт "Check Updates..." по которому открывается окошко и ищется свежая версия. Если версия нашлась, то есть возможность тут же её скачать (путём нажатия одной кнопки).

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

[PATHtoUpdates]
PrimaryPath=.\Updates

Таким образом пока что можно качать только ночнушки.
(0013466)
Tolik (manager)
30-12-2013 07:30

Только скачать? Распаковывать и копировать файлы придётся вручную? Она хоть скажет, куда скачала?
(0013467)
zed (manager)
30-12-2013 12:37

Три раза Да.
(0013498)
Tolik (manager)
07-01-2014 08:49

Работает, только в диалог боксе не видно, куда именно скачалось (см. скриншот).
(0013499)
Papazol (reporter)
07-01-2014 13:37

Гм, а у меня не заработало. Новую версию обнаружило, но пишет "Unknown status code 302". Не скачивает.
(0013501)
zed (manager)
07-01-2014 14:31

Странно, 302 - редирект и там в качалке явно указано, чтобы оно по ним автоматически ходило. Собственно, ссылку на закачку мы всегда получаем через редирект, в том числе и в браузере.
(0013502)
Papazol (reporter)
07-01-2014 18:59

Через браузер тоже не качается.
(0013503)
zed (manager)
08-01-2014 04:34

И кто блокирует соединение? Антивирус?
(0013507)
Papazol (reporter)
08-01-2014 06:46

Да вот не говорит он ничего про это. Если через браузер, пишет, что соединение закрыто сервером. Только у меня, что ли?
(0013510)
vdemidov (manager)
08-01-2014 07:55

>Только у меня, что ли?
Похоже на то. У меня отлично скачивает.
(0013511)
Papazol (reporter)
08-01-2014 09:02

Поотключал всё, что можно. Через браузер скачивается. Через SASПланету - нет. Код ошибки 302 (да вроде это и не ошибка, а предупреждение). Как ловить-то?
(0013512)
zed (manager)
08-01-2014 10:22

Браузер браузеру рознь. Нужно чтобы IE качал.
(0013516)
Papazol (reporter)
08-01-2014 10:37

IE - это полный... ППЦ! Он мне пишет, что "Указанное в сертификате название неправильно или не совпадает с названием узла". При нажатии "Продолжить" получается "Невозможно отобразить страницу". Ну, может и невозможно её отобразить, так ведь и по "Сохранить как..." тоже не получается. Вообще я замечаю, что доступ к этому файлу не всегда открыт. Вот сегодня раза три я его скачал (через Oper'у и качалку), а потом всё. Не банят там?
(0013534)
Papazol (reporter)
11-01-2014 06:43

У меня так и не работает. Вложил лог обмена (Proxomitron), может, прояснит что?
(0013537)
zed (manager)
11-01-2014 12:34

> Вложил лог обмена (Proxomitron)
Архив битый. И лучше лог делать не проксей, а снифером.
(0013538)
Papazol (reporter)
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 (manager)
11-01-2014 16:44

Упс, в скрипте nightly.php опечатка вышла - после dl.bintray.com стоит точка, а её там быть не должно. Удивительно, что некоторые версии wininet (видимо более новые) таки справляются с такими ошибками.
(0013592)
Parasite (administrator)
13-01-2014 15:31

>в скрипте nightly.php опечатка вышла
Пробуйте щас.
(0013632)
Papazol (reporter)
15-01-2014 16:29

В какой ночнушке исправлено? Сейчас у меня 7797.
(0013634)
zed (manager)
15-01-2014 16:42

Исправлено на сайте. Ночнушка получает адрес от nightly.php - это тот же скрипт, что и отдаёт архив при загрузке со странички в браузере.
(0013635)
Papazol (reporter)
15-01-2014 17:24

Дошло.
Всё равно не работает. Что с точкой, что без неё. Чем воспользоваться, чтобы отловить, где проблема?
(0013638)
zed (manager)
16-01-2014 11:27

Попробуйте взять нормальный снифер вроде Microsoft Network Monitor и собрать лог запросов. Проверьте свой фаервол и антивирус, возможно они блокируют соединения, обновите IE, по возможности не используйте никаких прокси.
(0013639)
Papazol (reporter)
17-01-2014 13:35

Вот взял я этот снифер, собрал лог. Файрвол и антивирус не блокируют соединение, по крайней мере сторонними программами я скачивать ночнушки могу без проблем. До чего обновлять IE? Прокси не используются.
(0013640)
zed (manager)
17-01-2014 13:47

> сторонними программами я скачивать ночнушки могу без проблем
Так IE ночнушки качает или нет? Если он не качает, то ничем помочь не могу. Ковыряйте его настройки.
(0013647)
Papazol (reporter)
18-01-2014 20:08

Всё, проблема решена. Причин было сразу две:
1. IE, который пришлось обновить, при этом ошибка 302 пропала. Однако, архив начинал скачиваться, но затем возникало сообщение о разрыве соединения с сервером, и файл не сохранялся по причине
2. И всё-таки антивирус, настойчиво блокирующий SASPlanet.Debug.exe. Пока не прописал в исключения http://966b.http.dal05.cdn.softlayer.net/*, никак не получалось.

- Users who viewed this issue
User List Anonymous (10180x), gamuer (1x), DemidovSG (1x), Tolik (1x), vdemidov (5x), kedroved (1x), ygorigor (3x), zed (5x), tiburon (2x), Garl (2x), bk99 (1x), netsky (4x), Kalkuttta (1x), zarius (1x), gma (1x), tedov (1x)
Total Views 10210
Last View 28-03-2024 08:12

- Issue History
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 View Revisions
20-03-2011 18:20 dumpy Note Edited: 0001317 View Revisions
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 View Revisions
21-03-2011 05:45 zed Note Edited: 0001320 View Revisions
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 View Revisions
25-03-2011 20:21 Tolik Note Added: 0001399
06-04-2011 21:54 gpsMax Description Updated View Revisions
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
10-01-2014 16:52 gma Note Added: 0013532
10-01-2014 16:55 gma Note Deleted: 0013532
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 View Revisions
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 => 26xxxx



Copyright © 2007 - 2024 SAS.Planet Team