Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
#1

Обновление программы. Проверка версий - C#

31.03.2012, 23:34. Просмотров 3305. Ответов 13
Метки нет (Все метки)

Вообщем вопрос вот в чем: Есть апдейтер, на сервере хранится фаил version.ini (или*.txt) с номером версии (например 0.2), а в папке с программой такой же фаил только с другим номером(напремер 0.1).Как сверить эти фаилы и при несовпадении версий выдать текст в label на подобии "Требуется обновление"? Уже голову сломал над этим...
http://www.cyberforum.ru/csharp-beginners/thread1798466.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 23:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обновление программы. Проверка версий (C#):

Обновление программы. Проверка версии
Доброго вечера форумчане. Делаю браузер. В с# только начинаю. Суть такова....

Обновление программы: проверка версии, скачивание
Привет всем как сделать обновление программы если можно даже в проекте а то я...

Обновление программы
Как удаленно обновлять программу? К примеру, я решил внести изменения, и...

Обновление программы
Доброго всем. Задался мыслю об обновлении программы как в Unversal Extracte...

Обновление программы
предположим какое либо по уже работает на многих компах если хотять добавить...

13
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
01.04.2012, 00:02 #2
А что именно не получается? Открыть файл для чтения, прочитать строку, и потом сверить её с строкой полученной с сервера?
0
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
01.04.2012, 00:04  [ТС] #3
Цитата Сообщение от Casper-SC Посмотреть сообщение
А что именно не получается? Открыть файл для чтения, прочитать строку, и потом сверить её с строкой полученной с сервера?
Да все не получается... Просто не могу представить как это все выглядит.
0
Mr.kto
95 / 96 / 18
Регистрация: 18.08.2012
Сообщений: 308
01.04.2012, 00:06 #4
1, [Ссылка на форум], 3
0
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
01.04.2012, 00:58  [ТС] #5
Цитата Сообщение от Mr.kto Посмотреть сообщение
1, [Ссылка на форум], 3
Спосибо, но не чего не понял... Можно привести самый простой пример проверки версий и вывода текста в лейбл, если не сложно...
0
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
01.04.2012, 10:35 #6
Самый простой вариант:

Передавать нужно значения в формате от: "[число].[число]", до: "[число].[число].[число].[число]" (без квадратных скобок и без кавычек). Описание конструктора класса Version принимающего строку в качестве параметра.
Примеры: 9.0; 1.2.3; 2.1.1.2 (числа естественно могут быть любыми)
C#
1
2
3
4
5
6
7
8
9
    public class VersionChecker
    {
        public bool NewVersionExists(string localVersion, string versionFromServer)
        {
            Version verLocal = new Version(localVersion);
            Version verWeb = new Version(versionFromServer);
            return verLocal < verWeb;
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    class Program
    {
        static void Main(string[] args)
        {
            VersionChecker verChecker = new VersionChecker();
            string localVersion = "0.1.56";
            string versionFromServer = "0.2.8.9";
            Console.WriteLine("Текущая версия {0}\tВерсия на сервере: {1}", localVersion, versionFromServer);
            Console.Write("Результат проверки: ");
            if (verChecker.NewVersionExists(localVersion, versionFromServer))
                Console.WriteLine("Доступна новая версия");
            else
                Console.WriteLine("У вас самая последняя версия");
 
            Console.ReadKey();
        }
    }
1
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
14.04.2012, 15:10  [ТС] #7
Сколько не пытался понять как это работает, так и не понял...

как к этому коду прелепить чтение версий из txt?
C#
1
2
3
4
5
6
7
8
9
VersionChecker verChecker = new VersionChecker();
                string localVersion = "0.2";
                string versionFromServer = "0.3";
              
               
                if (verChecker.NewVersionExists(localVersion, versionFromServer))
                     label2.Text += "Доступна новая версия";
                else
                    label2.Text += "У вас самая последняя версия";

Еще код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 const string updatestring = "http://сайт.ру/version.txt"; //ссылка на сайт, где лежит txt-файл с данными для обновления
 
           
            Stream stream = null;
stream = wc.OpenRead(updatestring);//Пытаемся скачать txtшник. Он считывается не в файл, а обрабатывается прямо в памяти.
            StreamReader read = new StreamReader(stream); //Читалка текста в потоках
            string newversion = read.ReadLine(); //Читаем первую строчку      
        
            read.Close(); //Закрываем потоки
 
            string version = Application.ProductVersion;
           
            if (newversion != version) // Если версии не совпадают - значит прога устарела
 
            {
 
                 label1.Text += "Обнови меня!";
 
 
            }
У меня соображения не хватает как это сделать. Можете помочь с этой бедой?
0
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
15.04.2012, 15:41  [ТС] #8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  VersionChecker verChecker = new VersionChecker();
            string ServerVersion = "http://сайт.ru/version.txt";
           
            string localVersion = "0.7";
 
          
            
            // Веб запрос к нашему серверу
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServerVersion);
            // Ответ сервера
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // Используем чтение потока данных
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                // Пытаемся получить версию сервера, приобразуя в Int32 из строки
                ServerVersion = reader.ReadToEnd();
               
                
                if (verChecker.NewVersionExists(localVersion, ServerVersion))
                    label1.Text += "Доступна новая версия";
                else
                    label1.Text += "У вас самая последняя версия";                
            }
С сервера дошло как прочитать фаил, а как прочитать строку из фаила version.txt который находится в папке с EXE-ком(localVersion)?
И еще вопрос: Как после скачивания обновления перезаписать номер версии в фаиле на HDD, номером версии из фаила на сервере?
0
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
15.04.2012, 15:54 #9
Ну грубо говоря:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string localVersionFile = Path.Combine(
                AppDomain.CurrentDomain.BaseDirectory, "Название файла.txt");
 
            if (File.Exists(localVersionFile))
            {
                string localVersion = null;
                using (StreamReader sr = File.OpenText(localVersionFile))
                {
                    localVersion = sr.ReadLine(); //Предположим у тебя одна строка в файле
                }
                if (!string.IsNullOrWhiteSpace(localVersion))
                {
                    //if (verChecker.NewVersionExists(localVersion, serverVersion))
                    //    label1.Text += "Доступна новая версия";
                    //else
                    //    label1.Text += "У вас самая последняя версия"; 
                }
                else
                {
                    Console.WriteLine("Аляяяяярм!!! (паника)");
                }
            }
            else
                Console.WriteLine("Аляяяяярм!!! (паника)");
 
            Console.ReadKey();
        }
    }
}
Добавлено через 1 минуту
Цитата Сообщение от qazwar Посмотреть сообщение
Как после скачивания обновления перезаписать номер версии в фаиле на HDD
Класс StreamWriter
1
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
15.04.2012, 16:12  [ТС] #10
Цитата Сообщение от Casper-SC Посмотреть сообщение
Класс StreamWriter
Можно пример, а то что-то я понять не могу как это реализовать...
0
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
15.04.2012, 16:33 #11
Цитата Сообщение от qazwar Посмотреть сообщение
Можно пример, а то что-то я понять не могу как это реализовать...
Вот смотри, ты ж как-то догадался как с сайта скачать файл и прочитать. Ты посмотрел какие есть перегрузки конструктора у класса StreamReader и открыл поток, чтобы прочесть с него текст.

Что делать с StreamWriter'ом? Пишешь в коде "StreamWriter" (без кавычек), подключаешь пространство имён (если не подключено). Всё видишь надпись подсветилась цветом подсвечивающим типы вообще (фиг знает как этот цвет правильно называется). Жмёшь F1, открывается браузер, грузит справку, ищешь (чисто интуитивно) метод включающий слово Write (логика такая, есть StreamReader, он умеет Read и ReadLine, значит StreamWriter скорее всего умеет Write и WriteLine), смотришь пример. Или как вариант пишешь что-то типа:
C#
1
2
StreamWriter sw;
sw.
На этом шаге (sw.) смотришь методы в IntelliSence, читая их описание и смотришь что методы принимают на входе. Ну ещё можно в студии нажать на названии класса F12, там посмотреть методы и т.д.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string localVersionFile = Path.Combine(
                AppDomain.CurrentDomain.BaseDirectory, "Название файла.txt");
 
            if (File.Exists(localVersionFile))
            {
                string localVersion = null;
                string serverVersion = "5.0";
                using (StreamReader sr = File.OpenText(localVersionFile))
                    localVersion = sr.ReadLine(); //Предположим у тебя одна строка в файле
                
                if (!string.IsNullOrWhiteSpace(localVersion))
                {
                    using (StreamWriter sw = new StreamWriter(localVersionFile))
                        sw.Write(serverVersion);
                }              
            }
 
            Console.ReadKey();
        }
    }
}
1
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
15.04.2012, 18:05  [ТС] #12
Casper-SC, Большое спосибо...
Последний вопрос: Код сравнения содержимого фаила и вывода результата в Лейбл помещен в ЛоадФорм... Код перезаписи версий помещен в DownloadFileCompleted, но при перезаписи версий выдается сообщение что фаил version.ini занят другим приложением. Как его закрыть перед перезаписью?
0
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
15.04.2012, 19:31 #13
Цитата Сообщение от qazwar Посмотреть сообщение
Как его закрыть перед перезаписью?
Без кода ничего нельзя сказать точно. И нужны не обрывки методов, а код, чтобы видеть всю последовательность действий в программе. Хотя, бывает проблема в каком-то методе, и кода этого метода (один из обрывков) хватает.
1
qazwar
0 / 0 / 1
Регистрация: 02.03.2012
Сообщений: 53
15.04.2012, 20:14  [ТС] #14
Цитата Сообщение от Casper-SC Посмотреть сообщение
Без кода ничего нельзя сказать точно. И нужны не обрывки методов, а код, чтобы видеть всю последовательность действий в программе. Хотя, бывает проблема в каком-то методе, и кода этого метода (один из обрывков) хватает.
Уже сам решил эту проблемму... Добавив в конец кода сравнения версий fs.Close();...
C#
1
2
3
4
5
6
7
8
9
10
using (StreamReader reader = new StreamReader(response.GetResponseStream()))// Используем чтение потока данных
                {
                    ServerVersion = reader.ReadToEnd();// Пытаемся получить версию сервера, приобразуя в Int32 из строки               
                    /*Сравниваем*/
                    if (verChecker.NewVersionExists(localVersion, ServerVersion))
                        label2.Text += "Доступна новая версия";
                    else
                        label2.Text += "У вас самая последняя версия";
                }
                fs.Close();//закрываем фаил для перезаписи версий
Насколько это правильно я не знаю- главное работает) А реализация кривым кодом в принципе роли не играет...
0
15.04.2012, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 20:14
Привет! Вот еще темы с решениями:

Обновление программы
всем привет есть программа, надо её обновлять ,как можно написать прогу для...

Обновление работающей программы
как обновить файл (exe) самой запущенной программы??

Автоматическое обновление программы
Здравствуйте. Я хочу сделать автоматическое обновление программы, но у меня...

Автоматическое обновление программы
Доброй ночи. Подскажите, как можно реализовать автоматическое автообновление?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru