• Программинг

Нужны источники бесперебойного питания?

Источники бесперебойного питания от дизельстор

Функция для проверки новой версии программы

Представьте, что вы написали программу. Программа хорошая, все пользуются, все довольны. Но подходит момент, когда выходит новая версия. Пользователи об этом ни слухом ни духом. Я предлагаю вам свой вариант решения этой проблемы.

Пример показывает как достать файл по URL, прочитать и обработать. Формат файла выбираем XML. Пример файла:

1 <?xml version="1.0" encoding="utf-8"?>
3   <version>2.2</version>
4   <whatnew>1. Обновлена программа
5 2. Появились новые функции</whatnew>
6   <url>http://krez0n.org.ua</url>
7 </UpdateVersion>

Названия атрибутов выбраны не просто так. Такие названия как UpdateVersion, version, whatnew, url – соответствуют названию класса и его полям, в которые будут считываться значения.

Наша задача, перевести содержимое файла в объект UpdateVersion, с которым мы можем работать. Ниже представлена функция и класс UpdateVersion, в который заносятся значения из XML файла.

1 UpdateVersion uv = null;
2 public void GetNewVersion()
3 {
4     //тестовый файл на моем блоге
6     //потоки для чтения
7     System.IO.Stream st = null;
8     System.IO.StreamReader sr = null;
9     //логин и пароль, если требуется установка авторизации на прокси сервере
10     string username = null, password = null;
11  
12     try
13     {
14         //подготавливаем запрос
15         System.Net.WebRequest req = System.Net.WebRequest.Create(sUrl);
16         //т.к. в данном примере логин и пароль пустые, ничего не заносим
17         if (username != null && password != null)
18             req.Credentials = new System.Net.NetworkCredential(username, password);
19  
20         //пытаемся получить файл
21         System.Net.WebResponse resp = req.GetResponse();
22  
23         //подключаемся к потоку
24         st = resp.GetResponseStream();
25         //читаем поток.. не забываем про кодировку
26         sr = new System.IO.StreamReader(st, Encoding.Default);
27  
28         //готовимся к сериализации. Задаем наш тип объекта UpdateVersion
29         XmlSerializer xml = new XmlSerializer(typeof(UpdateVersion));
30         //проводим десериализацию
31         uv = (UpdateVersion)xml.Deserialize(sr);
32         //если все прошло успешно, то в объекте uv будут храниться все значения
33         //спрашиваем у пользователя что делать дальше
34         if (MessageBox.Show("Вышла новая версия программы " + Application.ProductName + ": " + uv.version + "\nЧто нового:\n" + uv.whatnew + "\nСкачать новую версию?", "Новая версия программы", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
35         {
36             try
37             {
38                 //пытаемся перейти по ссылке открыв браузер
39                 Process.Start(uv.url);
40             }
41             catch { }
42         }
43     }
44     catch
45     {
46         return;
47     }
48     finally
49     {
50         //закрываем все потоки
51         if (sr != null)
52             sr.Close();
53  
54         if (st != null)
55             st.Close();
56     }
57 }
58  
59 //класс для сериализации
60 public class UpdateVersion
61 {
62     public string version; //версия программы
63     public string whatnew; //что нового в программе
64     public string url; //путь к программе
65 }

Это все, скажем так, основа. Код можно доработать, усложнить. Поставить проверки на ошибки и т.д.

Если что-то не понятно, пишите в комментариях.