Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.07.2010, 20:36   #21
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Для проверки доступности Интернет советую использовать эту функцию:

Код:
function IsInternetConnected: Boolean;
var
  connectiontype: DWORD ;
begin
  Result := False;
  try
  connectiontype := INTERNET_CONNECTION_MODEM
                   +INTERNET_CONNECTION_LAN
                   +INTERNET_CONNECTION_PROXY ;
  Result := InternetGetConnectedState(@connectiontype, 0);
  except end;
end;
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума
Старый 14.07.2010, 21:27   #22
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Хорошо, это понятно. В принципе я почти также делаю, только через ftp и на C#. Буду наверное переделывать под http. С версией программы всё понятно. У меня ещё есть программа, которая создаёт выпуск новостей (в выпуске может быть произвольное кол-во новостей), сохраняет его в виде файла (сериализация), потом этот файл заливает на хостинг по ftp, а программа переодически проверяет файлы на сервере, если есть то качает их и добаляет в xml файл имена скачанных файлов. В следующий раз программа получив список файлов на сервере в определённой папке для новостей, сверяет имя каждого файла с именами в базе (xml файл), если какого то нету, то качает его и добавляет в список, где пользователь уже может их посмотреть. Если все файлы уже были скачаны просто показывает сообщение: "У вас самые последние новости". Вот вопрос, через http тоже можно качать произвольные файлы? Сам подозреваю, что да, но всё же.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
да блин, ну не суть важно по какому протоколу вы получите данные, главное ими правильно воспользоватся.
Важно! Я же говорю, если через ftp, то мне платить за хостинг, а зачем, если можно бесплатно. И ещё, через ftp можно и с бесплатного хостинга качать, но это потребует логина и пароля, которые пихать в программу думаю глупо.

Кстати, а как вы программу обновляете? Я просто думаю надо давать возможность скачать, а пользователь сам установит, точнее я по другому не знаю как сделать, чтобы всё было автоматом

Проверку версии сделал как-то так:
Код:
        /// <summary>
        /// Сравнить версию программы с версией записанной в файле
        /// </summary>
        /// <param name="fileName">Полный путь к временному файлу включая имя файла</param>
        /// <param name="needShowInfoMessages">Нужно ли показывать сообщение, что у пользователя самая последняя версия</param>
        private static void CompareVersionProgram(string fileName, Boolean needShowInfoMessages)
        {
            StreamReader streamReader = new StreamReader(fileName, Encoding.UTF8);
            String lastVersion = streamReader.ReadLine(); //прочитать первую строку и получить номер версии
            String FileUrlForDownloading = streamReader.ReadLine(); //прочитать вторую строку и получить путь к файлу

            streamReader.Close(); //закрываем поток
            lastVersion = lastVersion.Trim(); //удаляем пробелы, если они есть
            String currentVersion = Application.ProductVersion; //получаем текущую версию приложения

            String[] lastVerArr = lastVersion.Split('.'); //разделяем на отдельные цифры номер версии, разделитель "точки"
            String[] currentVerArr = currentVersion.Split('.');

            int[] Int_lastVerArr = new int[lastVerArr.Length]; //создаём массив из цифр
            int[] Int_currentVerArr = new int[Int_lastVerArr.Length];

            for (int i = 0; i < lastVerArr.Length; i++) //заполняем массив из цифр, цифрами из массива строк
            {
                Int_lastVerArr[i] = Convert.ToInt32(lastVerArr[i]);
                Int_currentVerArr[i] = Convert.ToInt32(currentVerArr[i]);
            }


            if (Int_lastVerArr[0] > Int_currentVerArr[0] ||
                Int_lastVerArr[0] == Int_currentVerArr[0] && Int_lastVerArr[1] > Int_currentVerArr[1] ||
                Int_lastVerArr[0] == Int_currentVerArr[0] && Int_lastVerArr[1] == Int_currentVerArr[1] &&
                Int_lastVerArr[2] > Int_currentVerArr[2] ||
                Int_lastVerArr[0] == Int_currentVerArr[0] && Int_lastVerArr[1] == Int_currentVerArr[1] &&
                Int_lastVerArr[2] == Int_currentVerArr[2] && Int_lastVerArr[3] > Int_currentVerArr[3])
            {
                if (FileUrlForDownloading != null)
                {
                    if (MessageBox.Show("Доступна более новая версия.\n" + "Текущая версия приложения: " + Application.ProductVersion + "\n" +
                        "Версия предлагаемая сервером: " + lastVersion + "\n" + "Вы хотите скачать новую версию?", "Доступно обновление",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        Process.Start(FileUrlForDownloading);
                    }
                }
                else
                {
                    if (needShowInfoMessages)
                    MessageBox.Show("Обновления временно недоступны.");
                }
            }
            else
            {
                if (needShowInfoMessages)
                MessageBox.Show("У вас самая последняя версия.\n" + "Текущая версия приложения: " + Application.ProductVersion + "\n" +
                    "Версия предлагаемая сервером: " + lastVersion);
            }
        }

Последний раз редактировалось Casper-SC; 14.07.2010 в 21:37.
Casper-SC вне форума
Старый 14.07.2010, 21:46   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вот вопрос, через http тоже можно качать произвольные файлы?
что запросите то вам и датут(если есть такое конечно)
Цитата:
Важно! Я же говорю, если через ftp, то мне платить за хостинг
ну в таком случае да, важно.
Цитата:
Кстати, а как вы программу обновляете?
вообще обычно отдельный апдейтер, который уже и обновляет все(сам апдейтер можно и с помощью батника заменить, )
в принципе так и сама программа себя обновить может(батник)
то есть качаем все во временную папку(или файлы) и потом заменяем.

можно как в Опере, скачать инсталлер и потом его запустить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 15.07.2010, 15:18   #24
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

А подскажите как можно организовать получение новостей через http? Есть 2 программы, одна та что у пользователей, другая моя для создания файлов новостей (сериализация) и отправки по ftp на сервер в какую нибудь папку, чтобы потом можно было скачать так:
Код:

        /// <summary>
        /// Название файла, должно совпадать с файлом на сервере. Так как в дальнейшем будет
        /// проверяться, если это имя файла совпадает с одним из имён на сервере, то программа скачает его.
        /// </summary>
        private const String UpdateFileNameInServer = "Version.txt";
        /// <summary>
        /// Временная папка для хранения файла с информацией для обновления программы.
        /// </summary>
        private static String TempFilePath = GlobalSettings.appFolders.DefaultFolderForTemporary;

         ................
         ................

         WebClient webClient = new WebClient(); //инициализируем переменную класса WebClient
         webClient.DownloadFile(@"http://www.my-site.ru/" + UpdateFileNameInServer, 
         TempFilePath + "\\" + UpdateFileNameInServer);
Я вот подумал как можно: Отправляю файлы на сервер в папку ForUpdate
Одновременно записываю в текстовый файл пути к выгруженным файлам (например: "http://www.my-site.ru/ForUpdate/news_1.nws"), потом этот файл отправляю по какому нибудь определённому пути, программа моя скачивает этот текстовый файл и из него проверяет по именам файлов (предварительно отделив имя от пути), были ли они уже скачаны, если да то не качает, если нет то качает. Тут мне кажется трудный момент с этим текстовым файлом. Ведь когда-то устаревшие новости надо будет удалять с сервера и одновременно следить, чтобы в текстовом файле небыло путей на эти новости, мне кажется это слишком замудрённо. Вообще можно конечно реализовать, но мне кажется придётся писать очень продуманную систему, чтобы не было ошибок с новостями.

И если кто разбирается в данном вопросе, посмотрите пожалуйста. Там вопрос по проблеме с ucoz, хотел задать на этом форуме, но у меня выскакивали какие-то ошибки с форумом пришлось написать там.

Последний раз редактировалось Casper-SC; 15.07.2010 в 15:21.
Casper-SC вне форума
Старый 15.07.2010, 16:33   #25
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Один автор - Одна тема.
I'm learning to live...
Stilet вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где хранится информация о версии программы? vrsl Помощь студентам 4 22.04.2010 15:36
Добавить информацию о версии программы Alex Cones Общие вопросы Delphi 2 27.11.2009 09:18
Платная и бесплатная версии программы mosq Общие вопросы Delphi 5 28.08.2009 13:53
Вопрос о новой версии Дельфи Bagirli Софт 2 16.03.2009 18:44