View Issue Details

IDProjectCategoryView StatusLast Update
0000418SAS.ПланетаХотелка / Feature requestpublic30-12-2021 08:58
ReporterSneaky Pete Assigned To 
PrioritynoneSeveritytweakReproducibilityalways
Status confirmedResolutionopen 
PlatformWindowsOS7OS VersionUltimate
Product Version110216 
Target Version42xxxx 
Summary0000418: Автоматическое обновление SAS.Планета
DescriptionХотелось бы, чтобы был реализован способ автоматического поиска обновления программы с сайта. Загрузка. Обновление.
Как, к примеру, это реализовано в Скайпе. Было бы дико удобно, учитывая тот факт, что обновления очень часто появляются.
Tagsобновление, репозиторий
Attached Files
2014-01-07_124741.png (24,423 bytes)   
2014-01-07_124741.png (24,423 bytes)   
Лог.zip (1,597 bytes)
Capture.zip (10,937 bytes)

Relationships

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

Activities

vdemidov

22-02-2011 07:48

manager   ~0001035

Очень часто? Раз в 3-4 месяца это часто? Шутник, однако.

Sneaky Pete

22-02-2011 10:09

reporter   ~0001038

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

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

Скайп реже обновляется, а все-таки предусмотрено. Да таких прог тьма, которые сами смотрят на обновление.

vasketsov

22-02-2011 10:28

manager   ~0001039

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

И вообще есть стойкое ощущение, что автообновление обсуждаемой программы либо бессмысленно, либо даже вредно (в зависимости от возможной реализации). Всё равно для нормального использования программы необходимо часто появляться на форуме, следить за изменениями в сервисах, и это будет куда чаще, чем выходят обновления программы.

Sneaky Pete

22-02-2011 10:45

reporter   ~0001041

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

vasketsov

22-02-2011 11:32

manager   ~0001045

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

Papazol

22-02-2011 12:14

reporter   ~0001047

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

Sneaky Pete

23-02-2011 07:44

reporter   ~0001054

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

dumpy

20-03-2011 18:09

reporter   ~0001316

а как такой вариант

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

        }

    }

}

dumpy

20-03-2011 18:13

reporter   ~0001317

Last edited: 20-03-2011 18:20

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

Tolik

20-03-2011 19:25

manager   ~0001319

Прежде чем говорить об автообновлении, надо прикрутить нормальный инсталлятор, который умеет аккуратно делать обновления (распаковывать новые файлы, не портя *.ini, *.sml, zmp пользователя и прочее).

zed

21-03-2011 05:40

manager   ~0001320

Last edited: 21-03-2011 05:45

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

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

dumpy

21-03-2011 06:36

reporter   ~0001321

Tolik, а где вы видели в новых версиях программы *.ini, *.sml ?

Tolik

21-03-2011 06:41

manager   ~0001322

Во всех версиях _появляются_ во время работы:
Categorymarks.sml
marks.sml
SASPlanet.ini
Maps\Maps.ini

dumpy

21-03-2011 13:33

reporter   ~0001324

Tolik
так обновление и не трогало никогда файлы настроек и меток...

DJ VK

25-03-2011 18:53

manager   ~0001397

Last edited: 25-03-2011 18:56

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

Tolik

25-03-2011 20:21

manager   ~0001399

При чём тут альфа? Альфа по определению глючная. И автообновления на альфу быть не может.
А по теме - согласен, не нужно автообновление. И даже автопроверялка обновлений не нужна.
Впрочем, никто и не собирается её писать в обозримом будущем, так что обсуждать тут нечего.

zed

27-12-2013 20:52

manager   ~0013450

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

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

[PATHtoUpdates]
PrimaryPath=.\Updates

Таким образом пока что можно качать только ночнушки.

Tolik

30-12-2013 07:30

manager   ~0013466

Только скачать? Распаковывать и копировать файлы придётся вручную? Она хоть скажет, куда скачала?

zed

30-12-2013 12:37

manager   ~0013467

Три раза Да.

Tolik

07-01-2014 08:49

manager   ~0013498

Работает, только в диалог боксе не видно, куда именно скачалось (см. скриншот).

Papazol

07-01-2014 13:37

reporter   ~0013499

Гм, а у меня не заработало. Новую версию обнаружило, но пишет "Unknown status code 302". Не скачивает.

zed

07-01-2014 14:31

manager   ~0013501

Странно, 302 - редирект и там в качалке явно указано, чтобы оно по ним автоматически ходило. Собственно, ссылку на закачку мы всегда получаем через редирект, в том числе и в браузере.

Papazol

07-01-2014 18:59

reporter   ~0013502

Через браузер тоже не качается.

zed

08-01-2014 04:34

manager   ~0013503

И кто блокирует соединение? Антивирус?

Papazol

08-01-2014 06:46

reporter   ~0013507

Да вот не говорит он ничего про это. Если через браузер, пишет, что соединение закрыто сервером. Только у меня, что ли?

vdemidov

08-01-2014 07:55

manager   ~0013510

>Только у меня, что ли?
Похоже на то. У меня отлично скачивает.

Papazol

08-01-2014 09:02

reporter   ~0013511

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

zed

08-01-2014 10:22

manager   ~0013512

Браузер браузеру рознь. Нужно чтобы IE качал.

Papazol

08-01-2014 10:37

reporter   ~0013516

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

Papazol

11-01-2014 06:43

reporter   ~0013534

У меня так и не работает. Вложил лог обмена (Proxomitron), может, прояснит что?

zed

11-01-2014 12:34

manager   ~0013537

> Вложил лог обмена (Proxomitron)
Архив битый. И лучше лог делать не проксей, а снифером.

Papazol

11-01-2014 14:29

reporter   ~0013538

Last edited: 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/

zed

11-01-2014 16:44

manager   ~0013539

Упс, в скрипте nightly.php опечатка вышла - после dl.bintray.com стоит точка, а её там быть не должно. Удивительно, что некоторые версии wininet (видимо более новые) таки справляются с такими ошибками.

Parasite

13-01-2014 15:31

administrator   ~0013592

>в скрипте nightly.php опечатка вышла
Пробуйте щас.

Papazol

15-01-2014 16:29

reporter   ~0013632

В какой ночнушке исправлено? Сейчас у меня 7797.

zed

15-01-2014 16:42

manager   ~0013634

Исправлено на сайте. Ночнушка получает адрес от nightly.php - это тот же скрипт, что и отдаёт архив при загрузке со странички в браузере.

Papazol

15-01-2014 17:24

reporter   ~0013635

Дошло.
Всё равно не работает. Что с точкой, что без неё. Чем воспользоваться, чтобы отловить, где проблема?

zed

16-01-2014 11:27

manager   ~0013638

Попробуйте взять нормальный снифер вроде Microsoft Network Monitor и собрать лог запросов. Проверьте свой фаервол и антивирус, возможно они блокируют соединения, обновите IE, по возможности не используйте никаких прокси.

Papazol

17-01-2014 13:35

reporter   ~0013639

Вот взял я этот снифер, собрал лог. Файрвол и антивирус не блокируют соединение, по крайней мере сторонними программами я скачивать ночнушки могу без проблем. До чего обновлять IE? Прокси не используются.

zed

17-01-2014 13:47

manager   ~0013640

> сторонними программами я скачивать ночнушки могу без проблем
Так IE ночнушки качает или нет? Если он не качает, то ничем помочь не могу. Ковыряйте его настройки.

Papazol

18-01-2014 20:08

reporter   ~0013647

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

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
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