Russian Qt Forum
Ноябрь 24, 2024, 02:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: автообновление по сети  (Прочитано 7760 раз)
unkier
Гость
« : Май 26, 2011, 11:55 »

хотелось бы иметь маленькую программулину, которая каждый раз при запуске лезет в сеть, смотрит какая версия основной проги последняя, качает если есть изменения, устанавливает и запускает основную прогу. короче автообновлялку.
есть ли что то готовое или в любой степени готовности ? может кто то для себя делал и готов заделится ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 26, 2011, 12:40 »

Я сейчас такую пишу, но она закрытая (для нашей конторы), так что поделиться не могу. Грустный
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #2 : Май 26, 2011, 12:43 »

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

Я очень давно выдерал функцию для проверки обновлений. можешь глянуть её.

Код
C++ (Qt)
void QSpeedTest::_checkForProgramUpdates()
{
   QNetworkAccessManager manager;
   QNetworkReply *download;
   QEventLoop loop;
   int remoteVersion;
 
   _w.slotLog(trUtf8("Checking online for an updated version of %1").arg(PROGRAMNAME));
   QTimer::singleShot(UPDATECHECKTIMEOUTSECS * 1000, &loop, SLOT(quit()));
   download = manager.get(QNetworkRequest(QUrl(PROJECTVERSIONURL)));    // From here on, download pointer does not require manual deletion!
   connect(download, SIGNAL(finished()), &loop, SLOT(quit()));
   loop.exec();
 
   if(download->isRunning() || download->error())
   {
       download->abort();
       _w.slotLog(trUtf8("Update site unreachable"));
       return;
   }
 
   if((remoteVersion = download->readLine().mid(1).toInt()) > PROJECTVERSION.mid(1).toInt())
   {
       _w.slotLog(trUtf8("%1 update available, remote version: r%2").arg(PROGRAMNAME).arg(remoteVersion));
       int reply = QMessageBox::question(&_w, trUtf8("Update available"), trUtf8("An updated version of %1 (r%2) is available online.").arg(PROGRAMNAME).arg(remoteVersion) + "\n\n" + trUtf8("Would you like to open the download page in your browser?"), QMessageBox::Yes, QMessageBox::No);
 
       if(reply == QMessageBox::Yes)
       {
           _w.slotLog(trUtf8("Opening download page %1").arg(PROJECTDOWNLOADURL));
           QDesktopServices::openUrl(QUrl(PROJECTDOWNLOADURL));
       }
   }
   else {
       _w.slotLog(trUtf8("You are using the latest version of %1").arg(PROGRAMNAME));
   }
}
Записан
pokidoff
Гость
« Ответ #3 : Май 26, 2011, 12:46 »

Держи. В архиве исходники  и php скрипт. Прогу надо запускать перед стартом основной программы (что стартовать настраивается в инишнике см.архив), она обращается к скрипту на сервак (указывается в инишнике), тот смотрит в лежащую рядом с ним папку BIN, считывает CRC32 всех файлов в ней и отсылает проге в виде XML. Та в свою очередь сверяет CRC своих файлов с XML, и ежели чаго скачивает изменившийся файл.
Я у себя в локалке распространяю апдейтер в дистрибутиве, а он докачивает при первом старте все что нужно для основной проги. Интерфейс дружественный.
« Последнее редактирование: Июнь 22, 2011, 08:58 от pokidoff » Записан
unkier
Гость
« Ответ #4 : Май 26, 2011, 15:57 »

Держи. В архиве исходники  и php скрипт. Прогу надо запускать перед стартом основной программы (что стартовать настраивается в инишнике см.архив), она обращается к скрипту на сервак (указывается в инишнике), тот смотрит в лежащую рядом с ним папку BIN, считывает CRC32 всех файлов в ней и отсылает проге в виде XML. Та в свою очередь сверяет CRC своих файлов с XML, и ежели чаго скачивает изменившийся файл.
Я у себя в локалке распространяю апдейтер в дистрибутиве, а он докачивает при первом старте все что нужно для основной проги. Интерфейс дружественный.

жесть. спасибо. то что доктор прописал Улыбающийся а под какой лицензией прога Улыбающийся ? зарелизил бы проект, было бы много кому полезно я думаю.
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #5 : Май 26, 2011, 16:28 »

... она обращается к скрипту на сервак (указывается в инишнике), тот смотрит в лежащую рядом с ним папку BIN, считывает CRC32 всех файлов в ней и отсылает проге в виде XML. ...

Есть некоторые ограничения со стороны PHP скрипта - не расчитывает crc32 больших файлов, но этот функционал можно подправить!
Записан

pokidoff
Гость
« Ответ #6 : Май 26, 2011, 16:45 »

Цитировать
Есть некоторые ограничения со стороны PHP скрипта - не расчитывает crc32 больших файлов, но этот функционал можно подправить!
Лично тестил на файле ~130 Мб - оракловый клиент
Записан
Странник
Гость
« Ответ #7 : Май 26, 2011, 19:43 »

работаю в организации с сетью филиалов. раньше пользовались подобной схемой, сейчас перешли на клиент-серверное решение на Qt. тот же XML, но на уровне TCP/IP. проверка CRC32, кэширование на стороне сервера, компрессия, возможность докачки. производительность заметно подросла.
проект, к сожалению, закрытый. но если соберусь увольняться.. Подмигивающий
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #8 : Май 26, 2011, 20:09 »

Цитировать
Есть некоторые ограничения со стороны PHP скрипта - не расчитывает crc32 больших файлов, но этот функционал можно подправить!
Лично тестил на файле ~130 Мб - оракловый клиент
Решение не универсальное, я не могу хостера заставить снять ограничения со стороны php
Но в если написать свой cgi сценарий (или лучше написать его на Си)  то вполне работоспособное!



... сейчас перешли на клиент-серверное решение на Qt. тот же XML, но на уровне TCP/IP. проверка CRC32, кэширование на стороне сервера, компрессия, возможность докачки...

Вот истинное решение! Мне по душе! )))  Пойду в эту сторону! )))
Записан

pokidoff
Гость
« Ответ #9 : Май 27, 2011, 07:51 »

А закачка идет не через PHP. Скрипт служит только для оценки изменений.
Записан
Etud
Гость
« Ответ #10 : Июнь 21, 2011, 18:04 »

пишешь скрипт php который возвращает текущую версию программы...
Или ложишь на сервере файлик

очень грамотный консалтинг...

А как лучше PHP-скрипт или текстовик ?

АААааа, крокодилы - бегемоты...
Записан
Denjs
Гость
« Ответ #11 : Июнь 21, 2011, 18:48 »

Держи. В архиве исходники  и php скрипт. Прогу надо запускать перед стартом основной программы (что стартовать настраивается в инишнике см.архив), она обращается к скрипту на сервак (указывается в инишнике), тот смотрит в лежащую рядом с ним папку BIN, считывает CRC32 всех файлов в ней и отсылает проге в виде XML. Та в свою очередь сверяет CRC своих файлов с XML, и ежели чаго скачивает изменившийся файл.
Я у себя в локалке распространяю апдейтер в дистрибутиве, а он докачивает при первом старте все что нужно для основной проги. Интерфейс дружественный.

жесть. спасибо. то что доктор прописал Улыбающийся а под какой лицензией прога Улыбающийся ? зарелизил бы проект, было бы много кому полезно я думаю.
+1. Лицензия какая? GPL, LGPL, PublicDomain?
Записан
pokidoff
Гость
« Ответ #12 : Июнь 22, 2011, 08:59 »

Лицензия GPL. Архив обновил в четвертом посте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.233 секунд. Запросов: 22.