Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 18.02.2013, 18:58   #1
Заблокирован
 Разведчик
Аватар для Вырубатель
 
Вырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краях
Регистрация: 06.09.2012
Сообщений: 10
Популярность: -374
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Авто обновление Checker-a

итак сегодня я вам покажу как сделать авто обновление для своего Checker-a и так приступим открываем проект Checker
открываем Program.cs и вставляем после этого

[STAThread]
static void Main()
{

Цитата:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);

VersionChecker verChecker = new VersionChecker();
string ServerVersion = "http://hack66666.narod2.ru/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();

if (verChecker.NewVersionExists(localVersion, ServerVersion))
{
System.Diagnostics.Process MyProc = new System.Diagnostics.Process();
MyProc.StartInfo.FileName = @"Updater.exe";
MyProc.Start();
Application.Exit();
}
else
{
Application.Run(new Checker());
}
}
}
}

class VersionChecker
{
Цитата:
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);
}

void webClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}

void webClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
progressBar1.Value = 0;

string localVersionFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory , "Version.ini");
string ServerVersionFile = "http://hack66666.narod2.ru/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(ServerVersionFil e);
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);
}
}

Thread.Sleep(2000);
System.Diagnostics.Process MyProc = new System.Diagnostics.Process();
MyProc.StartInfo.FileName = @"Checker.exe";
MyProc.Start();
Application.Exit();
}
}
}

и после этого

InitializeComponent();
пишем
Цитата:
Загрузка();

теперь открываем Program.cs

и вставляем это после
}
}
Цитата:
class VersionChecker
{
public bool NewVersionExists(string localVersion, string versionFromServer)
{
Version verLocal = new Version(localVersion);
Version verWeb = new Version(versionFromServer);
return verLocal < verWeb;
}
}
}

Checker
  Ответить с цитированием
Старый 18.02.2013, 22:25   #2
 Разведчик
Аватар для Буянь
 
Буянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражания
Регистрация: 05.03.2011
Сообщений: 20
Популярность: 1883
Сказал(а) спасибо: 13
Поблагодарили 44 раз(а) в 36 сообщениях
Отправить сообщение для Буянь с помощью Skype™
 
По умолчанию Re: Авто обновление Checker-a

мой гк говнистее твоего

Добавлено через 3 минуты
Хотя нет

Добавлено через 5 минут
Или да?

Последний раз редактировалось Буянь; 18.02.2013 в 22:30. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 18.02.2013, 22:39   #3
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Авто обновление Checker-a

Буянь, WebClient создай в глобальной области видимости, инициализируй его в конструкторе. Там же подпишись на нужные события и качай версию с сайта асинхронно, через WebClient.DownloadStringAsync вместо HttpWebRequest.
Хотя даже так это лучше чем у ТС
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 19.02.2013, 06:10   #4
Заблокирован
 Разведчик
Аватар для Вырубатель
 
Вырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краях
Регистрация: 06.09.2012
Сообщений: 10
Популярность: -374
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от БуяньПосмотреть сообщение
мой гк говнистее твоего

Добавлено через 3 минуты
Хотя нет

Добавлено через 5 минут
Или да?

какой файл должен лежать на народе с версии version.ini ил что то другое
  Ответить с цитированием
Старый 19.02.2013, 06:13   #5
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от ВырубательПосмотреть сообщение
какой файл должен лежать на народе с версии version.ini ил что то другое

Да никакой файл там не должен лежать, просто на странице должна быть версия...
Как минимум в этом его версия лучше....
  Ответить с цитированием
Старый 19.02.2013, 06:36   #6
Заблокирован
 Разведчик
Аватар для Вырубатель
 
Вырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краяхВырубатель неизвестен в этих краях
Регистрация: 06.09.2012
Сообщений: 10
Популярность: -374
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от SinyssПосмотреть сообщение
Да никакой файл там не должен лежать, просто на странице должна быть версия...
Как минимум в этом его версия лучше....

Что то как то странно хот есть обновы хоть нет всё равно пишет пора обновляться чё за гемор ?
  Ответить с цитированием
Старый 19.02.2013, 19:10   #7
 Разведчик
Аватар для Буянь
 
Буянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражания
Регистрация: 05.03.2011
Сообщений: 20
Популярность: 1883
Сказал(а) спасибо: 13
Поблагодарили 44 раз(а) в 36 сообщениях
Отправить сообщение для Буянь с помощью Skype™
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от YukikazeПосмотреть сообщение
Буянь, WebClient создай в глобальной области видимости, инициализируй его в конструкторе. Там же подпишись на нужные события и качай версию с сайта асинхронно, через WebClient.DownloadStringAsync вместо HttpWebRequest.
Хотя даже так это лучше чем у ТС

я честно не смог использовать downloadStringAsync, потому что при проверке условия newVersion всегда была null (однако если поставить бряк чуть дальше в коде, она была равна 1.0.0.1)

пара изображений с ошибкой
кодэ с downloadString

Последний раз редактировалось Буянь; 19.02.2013 в 19:22.
  Ответить с цитированием
Старый 19.02.2013, 20:01   #8
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от БуяньПосмотреть сообщение
я честно не смог использовать downloadStringAsync, потому что при проверке условия newVersion всегда была null (однако если поставить бряк чуть дальше в коде, она была равна 1.0.0.1)

Надо подписать событие получение ответа и уже в нем вызывать тот участок кода...
  Ответить с цитированием
Старый 19.02.2013, 20:35   #9
 Разведчик
Аватар для Буянь
 
Буянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражанияБуянь блестящий пример для подражания
Регистрация: 05.03.2011
Сообщений: 20
Популярность: 1883
Сказал(а) спасибо: 13
Поблагодарили 44 раз(а) в 36 сообщениях
Отправить сообщение для Буянь с помощью Skype™
 
По умолчанию Re: Авто обновление Checker-a

Цитата:
Сообщение от SinyssПосмотреть сообщение
Надо подписать событие получение ответа и уже в нем вызывать тот участок кода...

гениально ._.
  Ответить с цитированием
Старый 19.02.2013, 21:42   #10
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Авто обновление Checker-a

Буянь, ты слишком часто используешь лямбды, если разбить твой пример на методы, то все становится на свои места
Вот небольшой пример псевдокода, показывающий как должно работать асинхронное приложение
Код:
wc.DownloadFileCompleted += wc_DownloadFileCompleted;
wc.DownloadStringCompleted += wc_DownloadStringCompleted;
wc.DownloadProgressChanged += wc_DownloadProgressChanged;
wc.DownloadStringAsync(url);

void wc_DownloadFileCompleted(object sender, EventArgs e)
{
    //запускаем скачанный файл
}

void wc_DownloadStringCompleted(object sender, EventArgs e)
{
    string result = e.Data;
    // а теперь получаем из полученной строки версию
    if(!result) //если строка не верна - начинаем качать
        wc.DownloadFileAsync(url, path);
}

void wc_DownloadProgressChanged(object sender, EventArgs e)
{
    //обновляем прогрессбар, выводим проценты, етц
}
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 10:02.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net