итак сегодня я вам покажу как сделать авто обновление для своего Checker-a и так приступим открываем проект Checker
открываем Program.cs и вставляем после этого
public bool NewVersionExists(string localVersion, string versionFromServer)
{
Version verLocal = new Version(localVersion);
Version verWeb = new Version(versionFromServer);
return verLocal < verWeb;
}
}
}
и в самом верху вставляем
Цитата:
using System.IO;
using System.Net;
всё закрываем проект Checker
теперь создаем новый проект настраиваем форму как вам угодно
у меня выглядит так
[Ссылки могут видеть только зарегистрированные пользователи. ]
и так вы настроили форму далее переходим к коду формы
в самом верху пишем
Цитата:
using System.IO;
using System.Net;
теперь вставляем после
public partial class Form1 : Form
{
Цитата:
System.Net.WebClient webClient = new System.Net.WebClient();
после это вставляем
public Form1()
{
InitializeComponent();
}
Цитата:
void Загрузка()
{
Uri uri = new Uri("http://hack66666.narod2.ru/Checker.exe");
webClient.DownloadFileAsync(uri, "Checker.exe");
webClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(web Client_DownloadProgressChanged);
webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(w ebClient_DownloadFileCompleted);
}
class VersionChecker
{
public bool NewVersionExists(string localVersion, string versionFromServer)
{
Version verLocal = new Version(localVersion);
Version verWeb = new Version(versionFromServer);
return verLocal < verWeb;
}
}
}
public MainForm()
{
InitializeComponent();
//текущая версия приложения, задается в файле assemblyInfo.cs
string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
string newVersion;
var request = (HttpWebRequest) HttpWebRequest.Create("http://luppoff-art.narod2.ru/");
using (var sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8)) {
var reg = new Regex ("current version is: (.*) <br>");
var match = reg.Match (sr.ReadToEnd());
newVersion = match.Groups[1].ToString();
}
if (version != newVersion) {
MessageBox.Show ("Пора обновляться!");
DownloadFileToPath("C:/Users/Артур/Desktop/chikentools_v1.1.exe");
}
else MessageBox.Show ("Обновление не требуется!");
}
void DownloadFileToPath(string path) {
WebClient wc = new WebClient ();
wc.DownloadFileCompleted += (s, e) => {
wc.CancelAsync();
MessageBox.Show ("Файл загружен!");
Process.Start (path);
Application.Exit();
};
wc.DownloadProgressChanged += (s, e) => {
label1.Text = e.ProgressPercentage.ToString() + "%";
};
wc.DownloadFileAsync (new Uri ("http://luppoff-art.narod2.ru/updater.exe"), path);
}
//Всего-то нужно поменять версию приложения на сайте и в assemblyInfo.cs
}
Добавлено через 3 минуты
Хотя нет
Добавлено через 5 минут
Или да?
Последний раз редактировалось Буянь; 18.02.2013 в 22:30.
Причина: Добавлено сообщение
Буянь, WebClient создай в глобальной области видимости, инициализируй его в конструкторе. Там же подпишись на нужные события и качай версию с сайта асинхронно, через WebClient.DownloadStringAsync вместо HttpWebRequest.
Хотя даже так это лучше чем у ТС
public MainForm()
{
InitializeComponent();
//текущая версия приложения, задается в файле assemblyInfo.cs
string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
string newVersion;
var request = (HttpWebRequest) HttpWebRequest.Create("http://luppoff-art.narod2.ru/");
using (var sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8)) {
var reg = new Regex ("current version is: (.*) <br>");
var match = reg.Match (sr.ReadToEnd());
newVersion = match.Groups[1].ToString();
}
if (version != newVersion) {
MessageBox.Show ("Пора обновляться!");
DownloadFileToPath("C:/Users/Артур/Desktop/chikentools_v1.1.exe");
}
else MessageBox.Show ("Обновление не требуется!");
}
void DownloadFileToPath(string path) {
WebClient wc = new WebClient ();
wc.DownloadFileCompleted += (s, e) => {
wc.CancelAsync();
MessageBox.Show ("Файл загружен!");
Process.Start (path);
Application.Exit();
};
wc.DownloadProgressChanged += (s, e) => {
label1.Text = e.ProgressPercentage.ToString() + "%";
};
wc.DownloadFileAsync (new Uri ("http://luppoff-art.narod2.ru/updater.exe"), path);
}
//Всего-то нужно поменять версию приложения на сайте и в assemblyInfo.cs
}
Добавлено через 3 минуты
Хотя нет
Добавлено через 5 минут
Или да?
какой файл должен лежать на народе с версии version.ini ил что то другое
Буянь, WebClient создай в глобальной области видимости, инициализируй его в конструкторе. Там же подпишись на нужные события и качай версию с сайта асинхронно, через WebClient.DownloadStringAsync вместо HttpWebRequest.
Хотя даже так это лучше чем у ТС
я честно не смог использовать downloadStringAsync, потому что при проверке условия newVersion всегда была null (однако если поставить бряк чуть дальше в коде, она была равна 1.0.0.1)
я честно не смог использовать downloadStringAsync, потому что при проверке условия newVersion всегда была null (однако если поставить бряк чуть дальше в коде, она была равна 1.0.0.1)
Надо подписать событие получение ответа и уже в нем вызывать тот участок кода...
Буянь, ты слишком часто используешь лямбды, если разбить твой пример на методы, то все становится на свои места
Вот небольшой пример псевдокода, показывающий как должно работать асинхронное приложение