Для практически большинства программ и приложений, и в частности написанных на C# для нашей статьи, у которых предвидеться хоть какая-то относительное долгое и плодотворное существование. А чтобы это существование было долгим и беспроблемным, необходима возможность постоянного обновления программы. А для самого процесса обновления, а точнее перед ним, программа должна решить, стоить ли ей обновиться или нет. Другими словами, программа должна уметь сверять свою версию с последней доступной версией программы.

Разумеется, что получение последней версии программы будут происходить из интернета и в самом простом случае это будет некий txt файл, который будет содержать номер последней версии файла. Далее программа должна получить свою версию и сверить полученные цифры.

По поводу цифр: если делать по феншую, то версия программы записывается следующим образом:

1.2.34.1

То есть четыре октета, прямо как в IP-адресе, если снять на ограничение до 255 в каждом октете. Что означает каждый октет можно довольно просто объяснить, если залезть в файл AssemblyInfo.cs и скопировать следующие строчки:

[code]//Сведения о версии сборки состоят из следующих четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер построения
// Редакция
//[/code]

Вот таким образом составляется версия программы. И кстати именно в файле AssemblyInfo.cs и указывается номер программы:

[csharp][assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")][/csharp]

Значения по умолчанию вы можете менять в этом файле вручную, либо сделать то же самое в Свойствах проекта и нажав кнопку Сведения о сборке.

Сверяем версии приложения в C#

Теперь, когда с теорией немного разобрались, можно переходить к самому коду. Итак, ниже привожу метод который вызывается каждый раз при запуске одной из моих программ для проверки наличия обновления:

[csharp]public bool check()
{
VersionChecker verChecker = new VersionChecker();
string s = "";
string localVersion = "";
try
{
while (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) //ждем пока подрубимся к сети
{
System.Threading.Thread.Sleep(60000);
}
localVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); //получение версии запущенной программы
WebClient w = new WebClient();
s = w.DownloadString("http:// domen.ru/version.txt");
w.Dispose();
}
catch (Exception ex)
{
errors(ex.Message);
}
string[] q = s.Split(‘|’); // у меня в файле указана не только версия, но и адрес для загрузки последней версии программы через знак ‘|’
if (verChecker.NewVersionExists(localVersion, q[0])) // отправляем две версии другому методу для их сверки
{
load_obnovlenie(q[1]); //версия старая и запускаем метод по обновлению нашей программы(будет в следующей статье)
}
else
{
return false; //версия новая
}
return true; //даем знать основной команде, которая вызвала метод, что мол, есть обнова и лучше нам пока не начинать работать
}[/csharp]

Код дополнен комментариями и поэтому у вас не должно возникнуть проблем с пониманием кода. Единственное что должно вас заинтересовать этот вызываемые методы

[csharp]verChecker.NewVersionExists(localVersion, q[0])[/csharp]

и

[csharp]load_obnovlenie(q[1])[/csharp]

и параметры, которые в них передаются. Если первое передает две версии файла(локальной программы и последней на сервере), то второе в случае наличия новой версии файла вызывает другой метод с указанием ссылки на новую версию файла. Второй метод будет рассмотрен чуть позже, а вот первый я приведу ниже:

[csharp]public bool NewVersionExists(string localVersion, string versionFromServer)
{
Version verLocal = new Version(localVersion);
Version verWeb = new Version(versionFromServer);
return verLocal < verWeb;
}[/csharp]

Как видите все довольно просто благодаря специальному классу Version, встроенный в C#.

Вот таким довольно простым способом можно узнать номер последней версии вашей программы, сверить её с версией локального файла и при необходимости обновить программу.