1. BanDiTuK04.05.2025 в 10:50от
Загрузка...

[Manual] Делаем Updeter на C#

Тема в разделе "Point Blank", создана пользователем ℑℴℵ, 07.05.2012.

  1. ℑℴℵ

    ℑℴℵ

    Статус:
    Оффлайн
    Регистрация:
    25.04.12
    Сообщения:
    87
    Репутация:
    22 +/-
    [​IMG]

    1) Создаем проект: С# - Win.Form
    2) На форму кидаем:
    webBrowser - 1шт (можно и richTextBox, но кода будет больше, так что пойдем более легким путем)
    button - 1шт
    progressBar - 1шт
    label - 2шт

    [​IMG]

    3) Перейдем к коду:

    Подключаем:
    Код:
    using System.IO;
         using System.Net;
         using System.Threading;
         using System.Diagnostics;
    
    webBrowser
    Выделяем webBrowser и в свойствах указываем ссылку на фаил txt с описанием(UTF-8)

    [​IMG]

    button
    Внутри partial class Form1 : Form пишем
    Код:
    System.Net.WebClient webClient = new System.Net.WebClient();//Определяем
    
    [​IMG]

    Для кнопки зададим скачавание фаила в папку с программай +прикрутим ко всему этому progressBar и небольшую инфу о скачивание)))
    Двойной клик по кнопке, пишем:
    Код:
    Uri uri = new Uri("http://Сайт.ru/wh/фаилл.rar");//для примера ссылка на фаил))))))))
                webClient.DownloadFileAsync(uri, "фаилл.rar");//сохраняем фаил под именем
                //Следующей строчкой задаем заполнение и привязку к действию
                webClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
                webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
    
    Ниже задаем заполнение progressBar и инфы о фаиле:
    Код:
    void webClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
            {
                label1.Text = String.Format("Загружено: {0} Кбайт / {1} Кбайт", e.BytesReceived / 1024, e.TotalBytesToReceive / 1024);//Выводим в лейбл информацию о процессе загрузки
                progressBar1.Value = e.ProgressPercentage;// заполняем 
            }
    
    Теперь зададим действие при завершению загрузки фаила:
    Код:
    
    void webClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
            {
                MessageBox.Show("Файл скачан!");//по оканчанию загрузки выводим сообщение
                progressBar1.Value = 0;//сброс progressBar2  
                label1.Visible = false;// сброс лейбл
            }
    
    Теперь организуем проверку версий программы:

    В папке с программой создаем фаил version.ini и загружаем на сервер. В фаиле пишем версию программы(например 0.1).
    Если версия на сервере будет отличатся от версии в папке с программой, то в лейбл выводим соответствующее сообщение.
    После скачивания фаила, версия программы в папке с exe будет переписана на версию с сервера...
    (я использовал narod2.yandex.ru, на юкозе почему-то проподает запрос....)

    Для начала создадим класс для сравнения:

    [​IMG]
    [​IMG]
    Код:
    class VersionChecker
        {
            public bool NewVersionExists(string localVersion, string versionFromServer)
            {
                Version verLocal = new Version(localVersion);
                Version verWeb = new Version(versionFromServer);
                return verLocal < verWeb;
            }
        }
    
    В Form_Load(двойной клик на форме) пишем:
    Код:
    //----Определение обновлений-------
                    VersionChecker verChecker = new VersionChecker();
                    string ServerVersion = "http://*****.narod2.ru/wh/version.ini";
                    FileStream fs = new FileStream(@"version.ini", FileMode.Open);
                    StreamReader sr = new StreamReader(fs, Encoding.Default);
                    string localVersion = sr.ReadToEnd();
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServerVersion);// Веб запрос к нашему серверу
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Ответ сервера
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))// Используем чтение потока данных
                    {
                        ServerVersion = reader.ReadToEnd();// Пытаемся получить версию сервера, приобразуя в Int32              
                        /*Сравниваем*/
                        if (verChecker.NewVersionExists(localVersion, ServerVersion))
                            label2.Text += "Доступна новая версия";//если версии отличаются
                        else
                            label2.Text += "У вас самая последняя версия";//если версии одинаковые
                    }
                    fs.Close();//закрываем фаил для перезаписи версий
    
    Теперь организуем перезапись version.ini

    В webClient_DownloadFileCompleted дописываем
    Код:
    //-------Перезаписываем version.ini--
                string localVersionFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "version.ini");
                string ServerVersionFile = "http://******narod2.ru/wh/version.ini";
                if (File.Exists(localVersionFile))
                {
                    string localVersion = null;
                    string ServerVersion = null;
                    using (StreamReader sr = File.OpenText(localVersionFile))
                    localVersion = sr.ReadLine(); //Предположим у тебя одна строка в файле
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServerVersionFile);// Веб запрос к нашему серверу
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Ответ сервера
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))// Используем чтение потока данных
                        ServerVersion = reader.ReadToEnd();
                    if (!string.IsNullOrWhiteSpace(localVersion))
                    {
                        using (StreamWriter sw = new StreamWriter(localVersionFile))
                            sw.Write(ServerVersion);
                    }
    
    Код наверно не совсем правильный, но это все до чего дошел мой мозг... Главное работает)))

    Вроде все...

    Скачать исходник
    VT
     
  2. som_ginex37610

    som_ginex37610

    Статус:
    Оффлайн
    Регистрация:
    26.08.11
    Сообщения:
    1.838
    Репутация:
    751 +/-
    VT-exe файла,а не архива.
     
  3. ℑℴℵ

    ℑℴℵ

    Статус:
    Оффлайн
    Регистрация:
    25.04.12
    Сообщения:
    87
    Репутация:
    22 +/-
    Какой *.exe файл, это исходник!
    Только флудить и умеешь, а мозгами раскинуть никак.

    В архиве нет ни одного exe-шника
     
  4. FrozenHunter

    FrozenHunter

    Статус:
    Оффлайн
    Регистрация:
    06.02.12
    Сообщения:
    1.707
    Репутация:
    536 +/-
    Отлично. Как будет свободное время, займусь ;)
     
  5. asloo

    asloo

    Статус:
    Оффлайн
    Регистрация:
    18.08.11
    Сообщения:
    531
    Репутация:
    178 +/-
    ДЛЯ ЧЕГО это надо?) и почему в разделе ПБ...
     
  6. EVO-X

    EVO-X

    Статус:
    Оффлайн
    Регистрация:
    13.05.12
    Сообщения:
    43
    Репутация:
    28 +/-
    Археолог детектед?)