Notes |
|
|
Очень часто? Раз в 3-4 месяца это часто? Шутник, однако. |
|
|
|
Версия 110216 (16.02.2011)
Версия 101206 (06.12.2010)
Речи о 3-4 месяцах нет. Два месяца - уже часто.
Скайп реже обновляется, а все-таки предусмотрено. Да таких прог тьма, которые сами смотрят на обновление. |
|
|
|
>чтобы был реализован способ автоматического поиска обновления программы с сайта
Нет ничего проще, достаточно выкладывать актуальную версию по фиксированному адресу, и ничего искать не надо, автообновлялка пишется простым батником.
И вообще есть стойкое ощущение, что автообновление обсуждаемой программы либо бессмысленно, либо даже вредно (в зависимости от возможной реализации). Всё равно для нормального использования программы необходимо часто появляться на форуме, следить за изменениями в сервисах, и это будет куда чаще, чем выходят обновления программы. |
|
|
|
А в чем вредоносность? Перезаписывать основные файлы, не трогая кэш... При желании еще и версии карт. Ну и потом, никто не насилует - не хочешь, не соглашайся на обновление. |
|
|
|
Вредность в непрозрачности обновления zmp. На каждый zmp есть пользовательские настройки, что предлагаете с ними делать? Там по каждой опции такая тьма вопросов, что в настройках автообновления можно утонуть с концами. Даже на тему добавления в программу новых zmp в момент автообновления можно сломать столько копий, что мало не покажется. А если вообще не обновлять zmp, то смысла в автообновлении ноль без палочки.
И вообще начинать тему автообновления надо с автообновления (причём без перезапуска программы) именно дефолтных настроек доступа к сервисам, в чём действительно есть смысл, а не с автоматической скачки одной простой EXEхи. |
|
|
|
На мой взгляд, автообновление ни программы, ни zmp не нужно. Потому что программа находится и будет ещё долго находиться в процессе разработки, зачастую в новых версиях то, что работало в старых, не работает. Так не лучше ли иметь у себя скачанные дистрибутивы и, в случае чего просто перекинуть в папку несколько файлов(а чаще один)?
Папку maps надо вообще обновлять с большой осторожностью, особенно если там zmp с внесёнными вами изменениями. Например, у меня все zmp - это архивы, а не папки, и я хочу, чтобы все карты/снимки/слои с одного сервиса лежали в одном родительском пункте меню. Программа сортирует zmp по параметру AsLayer, а мне этого не нужно. Кроме как присвоить им нужные pnum, другого способа так сделать нет. Ну и всё в том же духе. Как я могу обновить всё это автоматически? |
|
|
|
Ну поэтому приоритет и низкий, что есть смысл задуматься об этом при выпуске уже финального релиза. |
|
|
(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
|
|
Работает, только в диалог боксе не видно, куда именно скачалось (см. скриншот). |
|
|
|
Гм, а у меня не заработало. Новую версию обнаружило, но пишет "Unknown status code 302". Не скачивает. |
|
|
(0013501)
|
zed
|
07-01-2014 14:31
|
|
Странно, 302 - редирект и там в качалке явно указано, чтобы оно по ним автоматически ходило. Собственно, ссылку на закачку мы всегда получаем через редирект, в том числе и в браузере. |
|
|
|
Через браузер тоже не качается. |
|
|
(0013503)
|
zed
|
08-01-2014 04:34
|
|
И кто блокирует соединение? Антивирус? |
|
|
|
Да вот не говорит он ничего про это. Если через браузер, пишет, что соединение закрыто сервером. Только у меня, что ли? |
|
|
|
>Только у меня, что ли?
Похоже на то. У меня отлично скачивает. |
|
|
|
Поотключал всё, что можно. Через браузер скачивается. Через SASПланету - нет. Код ошибки 302 (да вроде это и не ошибка, а предупреждение). Как ловить-то? |
|
|
(0013512)
|
zed
|
08-01-2014 10:22
|
|
Браузер браузеру рознь. Нужно чтобы IE качал. |
|
|
|
IE - это полный... ППЦ! Он мне пишет, что "Указанное в сертификате название неправильно или не совпадает с названием узла". При нажатии "Продолжить" получается "Невозможно отобразить страницу". Ну, может и невозможно её отобразить, так ведь и по "Сохранить как..." тоже не получается. Вообще я замечаю, что доступ к этому файлу не всегда открыт. Вот сегодня раза три я его скачал (через Oper'у и качалку), а потом всё. Не банят там? |
|
|
|
У меня так и не работает. Вложил лог обмена (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 (видимо более новые) таки справляются с такими ошибками. |
|
|
|
>в скрипте nightly.php опечатка вышла
Пробуйте щас. |
|
|
|
В какой ночнушке исправлено? Сейчас у меня 7797. |
|
|
(0013634)
|
zed
|
15-01-2014 16:42
|
|
Исправлено на сайте. Ночнушка получает адрес от nightly.php - это тот же скрипт, что и отдаёт архив при загрузке со странички в браузере. |
|
|
|
Дошло.
Всё равно не работает. Что с точкой, что без неё. Чем воспользоваться, чтобы отловить, где проблема? |
|
|
(0013638)
|
zed
|
16-01-2014 11:27
|
|
Попробуйте взять нормальный снифер вроде Microsoft Network Monitor и собрать лог запросов. Проверьте свой фаервол и антивирус, возможно они блокируют соединения, обновите IE, по возможности не используйте никаких прокси. |
|
|
|
Вот взял я этот снифер, собрал лог. Файрвол и антивирус не блокируют соединение, по крайней мере сторонними программами я скачивать ночнушки могу без проблем. До чего обновлять IE? Прокси не используются. |
|
|
(0013640)
|
zed
|
17-01-2014 13:47
|
|
> сторонними программами я скачивать ночнушки могу без проблем
Так IE ночнушки качает или нет? Если он не качает, то ничем помочь не могу. Ковыряйте его настройки. |
|
|
|
Всё, проблема решена. Причин было сразу две:
1. IE, который пришлось обновить, при этом ошибка 302 пропала. Однако, архив начинал скачиваться, но затем возникало сообщение о разрыве соединения с сервером, и файл не сохранялся по причине
2. И всё-таки антивирус, настойчиво блокирующий SASPlanet.Debug.exe. Пока не прописал в исключения http://966b.http.dal05.cdn.softlayer.net/*, никак не получалось. |
|