рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ C # рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдкрдбреЗрдЯ

рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ ( рдПрдХ рдмрд╛рд░ рдФрд░ рджреЛ рдмрд╛рд░ ) рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХрдИ рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ "рдЕрдиреБрдХреВрд▓", рдпрд╛ рдХреБрдЫ рдФрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдХреЗ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдХреЗ, рдореИрдВ рдмреЗрд╣рддрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрджреНрдпрддрди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛ (рдЪреЗрдХрд╕рдо рдХреА рдЬрд╛рдБрдЪ), рдФрд░ рдХрдИ рдирдП рд╡рд┐рдХрд╛рд╕ рднреА рдЬреЛрдбрд╝реЗред рд╡рд╣рд╛рдВ рдореИрдВ рдЦреБрдж рдХреЗ рдкреБрдирд░реНрд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЫрд╡рд┐

рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ, рдореЗрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

рдХреЛрдб рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рдереАред рдЪреЗрдХрд╕рдо рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдерд╛, рдЬреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
рддреЛ рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЙрд╕реА рдХрд╣рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреАрд╕рд░рд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг ред Xml рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рдЧрдИ:

<?xml version="1.0" encoding="utf-8"?> <version> <myprogram checksumm="05b2b2eb79c4f11834b25095acc047f9">1.0.7.88</myprogram> <updater checksumm="aaef7c8a1f9437138acfc80fb2c4354b">1.0.0.7</updater> <restart checksumm="d3904a3fe5ff2ab3a0f246bdde293345">1.0.1.9</restart> <processesLibrary checksumm="2b999c9eb771374c87490f5dee5da9ec">1.0.1.10</processesLibrary> <languagePack checksumm="d5724f066cea211eb5f0efb6365ba0c9">1.0.0.4</languagePack> <Newtonsoft.Json checksumm="5619e5d4b93e544c7b9174c062f6c40b">6.0.1.17001</Newtonsoft.Json> <Ionic.Zip checksumm="6ded8fcbf5f1d9e422b327ca51625e24">1.9.1.8</Ionic.Zip> </version> 


рдкрд░рд┐рд╡рд░реНрддрди


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЪреЗрдХрд╕рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдордбреА 5 рдпреЛрдЧ рд╣реИред

рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╡рд░реНрдХрд░ рд╡рд░реНрдЧ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЯрд╛рд╕реНрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:

 debug debug = new debug(); private string url = @"http://mysite/"; private ProgressBar downloadPercent = null; 

рдбреАрдмрдЧ рд╡рд░реНрдЧ рдмреЗрд╣рддрд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдпреВрдЖрд░рдПрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдкрде рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде рдореЗрдВред
рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдЕрджреНрдпрддрдиреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ProgressBar рд╡рд░реНрдЧ рдХреЗ рдбрд╛рдЙрдирд▓реЛрдбрд░реЗрдВрдЯ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдЪреЗрдХ () рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдШрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛:

 public void Check(bool launcher = false, ProgressBar report = null) { try { XmlDocument doc = new XmlDocument(); doc.Load(url + "version.xml"); if (!File.Exists("settings.xml")) { using (var client = new WebClient()) Task.Factory.StartNew(() => client.DownloadFile(new Uri(url + "settings.xml"), "settings.xml")).Wait(); } //     ,    if (File.Exists("settings.xml") && new FileInfo("settings.xml").Length == 0) { File.Delete("settings.xml"); } if (File.Exists("Ionic.Zip.dll") && new FileInfo("Ionic.Zip.dll").Length == 0) { File.Delete("Ionic.Zip.dll"); } if (File.Exists("restart.exe") && new FileInfo("restart.exe").Length == 0) { File.Delete("restart.exe"); } if (File.Exists("updater.exe") && new FileInfo("updater.exe").Length == 0) { File.Delete("updater.exe"); } if (File.Exists("Newtonsoft.Json.dll") && new FileInfo("Newtonsoft.Json.dll").Length == 0) { File.Delete("Newtonsoft.Json.dll"); } if (File.Exists("ProcessesLibrary.dll") && new FileInfo("ProcessesLibrary.dll").Length == 0) { File.Delete("ProcessesLibrary.dll"); } if (File.Exists("LanguagePack.dll") && new FileInfo("LanguagePack.dll").Length == 0) { File.Delete("LanguagePack.dll"); } if (File.Exists("launcher.update") && new FileInfo("launcher.update").Length == 0) { File.Delete("launcher.update"); } if (!launcher) { var task1 = Task.Factory.StartNew(() => DownloadFile("Ionic.Zip.dll", doc.GetElementsByTagName("Ionic.Zip")[0].InnerText, doc.GetElementsByTagName("Ionic.Zip")[0].Attributes["checksumm"].InnerText)); var task2 = Task.Factory.StartNew(() => DownloadFile("restart.exe", doc.GetElementsByTagName("restart")[0].InnerText, doc.GetElementsByTagName("restart")[0].Attributes["checksumm"].InnerText)); var task6 = Task.Factory.StartNew(() => DownloadFile("LanguagePack.dll", doc.GetElementsByTagName("languagePack")[0].InnerText, doc.GetElementsByTagName("languagePack")[0].Attributes["checksumm"].InnerText)); Task.WaitAll(task1, task2, task6); } 

рдЕрдм рд╕рдм рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред
рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ ( settings.xml ) рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЖрдЧреЗ (рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реБрдЖ), рдпрджрд┐ рдлрд╛рдЗрд▓реЗрдВ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХреА рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рднреА рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЯреВрдЯреА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рд╕рд╣реА рд╣реИ рдирд╛?
рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдЬрд╛рдВрдЪ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд▓реЙрдиреНрдЪрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЗ рд░реВрдк рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп рдЙрдкрд░реЛрдХреНрдд рд╕реВрдЪреА рд╕реЗ рдХреЗрд╡рд▓ 3 рдлрд╛рдЗрд▓реЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдпрджрд┐ рд▓реЙрдиреНрдЪрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЭреВрдард╛ рд╣реИ , рддреЛ рд╣рдо рдореБрдЦреНрдп рдлрд╛рдЗрд▓ (Ionic.Zip.dll, LanguagePack.dll, restart.exe) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреЛрдб рдФрд░ рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлреЙрд░реНрдо 1 () рдореЗрдВ рдореБрдЦреНрдп рдлреЙрд░реНрдо рдХреЗ рдХреЛрдб рдореЗрдВ, InitializeComponent () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ; рд╣рдорд╛рд░реЗ рдЕрджреНрдпрддрди рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВред рд╣рд╛рдВ, рд╡рд░реНрдЧ, рдЪреВрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рднреА рдХреЛрдб рдЕрд▓рдЧ рд╕реЗ (рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП) рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

 update_launcher update = new update_launcher(); update.Check(true, pbDownload); 

рдХреЙрд▓ рдЕрдкрдбреЗрдЯ рдореЗрдВред рдЪреЗрдХ (рд╕рд╣реА, рдкреНрд░рдЧрддрд┐рдмреЗрд░ 1 ); рд╣рдо, рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрджреНрдпрддрди рдФрд░ рдЖрд╡реЗрджрди рдХреА рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдПрдЧреАред рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкреНрд░рдЧрддрд┐рдмрд╛рд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рд▓реЛрдб рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд╛рдВрдЪрд░ = рд╕рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ , рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдЪреЗрдХ () рдлрд╝рдВрдХреНрд╢рди (рдХреЛрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рдЬрд╛рд░реА рд░рдЦрдиреЗ ) рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛:

  else { try { var task3 = Task.Factory.StartNew(() => DownloadFile("updater.exe", doc.GetElementsByTagName("updater")[0].InnerText, doc.GetElementsByTagName("updater")[0].Attributes["checksumm"].InnerText)); var task4 = Task.Factory.StartNew(() => DownloadFile("Newtonsoft.Json.dll", doc.GetElementsByTagName("Newtonsoft.Json")[0].InnerText, doc.GetElementsByTagName("Newtonsoft.Json")[0].Attributes["checksumm"].InnerText)); var task5 = Task.Factory.StartNew(() => DownloadFile("ProcessesLibrary.dll", doc.GetElementsByTagName("processesLibrary")[0].InnerText, doc.GetElementsByTagName("processesLibrary")[0].Attributes["checksumm"].InnerText)); Task.WaitAll(task3, task4, task5); if (File.Exists("launcher.update") && new Version(FileVersionInfo.GetVersionInfo("launcher.update").FileVersion) > new Version(Application.ProductVersion)) { Process.Start("updater.exe", "launcher.update \"" + Application.ProductName + ".exe\""); Process.GetCurrentProcess().CloseMainWindow(); } else if (new Version(Application.ProductVersion) < new Version(doc.GetElementsByTagName("version")[0].InnerText)) { if (report != null) { downloadPercent = report; downloadPercent.Value = 0; } Task.Factory.StartNew(() => DownloadFile("launcher.exe", doc.GetElementsByTagName("version")[0].InnerText, doc.GetElementsByTagName("version")[0].Attributes["checksumm"].InnerText, "launcher.update", true)).Wait(); } else if (File.Exists("launcher.update")) { File.Delete("launcher.update"); } } catch (Exception ex1) { debug.Save("public void Check(bool launcher = false)", "launcher.update", ex1.Message); } } } catch (Exception ex) { debug.Save("public void Check(bool launcher = false)", "", ex.Message); } } 

рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИ? System.Threading.Tasks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ; , рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЪрд░ рдирд╛рдо ( рдХрд╛рд░реНрдп 3 , рдЯрд╛рд╕реНрдХ 4 , рдЯрд╛рд╕реНрдХ 5 ) рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред
рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЯрд╛рд╕реНрдХ рдХреНрд▓рд╛рд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбреНрд╕ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рднреВрд▓ рдЬрд╛рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░ рджреЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо DownloadFile () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ ; рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рдЕрд░реНрдерд╛рддреН:

 private void DownloadFile(string filename, string xmlVersion, string xmlChecksumm, string localFile = null, bool showStatus = false) 

рдЬрд╣рд╛рдВ:


рдлрдВрдХреНрд╢рди рдЯрд╛рд╕реНрдХ.рдлреИрдХреНрдЯрд░реАред рд╕рд╛рд░реНрдЯрдиреНрдпреВ (); рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдм рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЯрд╛рд╕реНрдХ.рдРрдЯрдПрдЯрд▓ рдлрд╝рдВрдХреНрд╢рди (рдЯрд╛рд╕реНрдХ 3, рдЯрд╛рд╕реНрдХ 4, рдЯрд╛рд╕реНрдХ 5) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; , рд╕рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡реЛрдВ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред
рдЗрд╕рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдореБрдЦреНрдп рдПрдХ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рдЕрдкрдбреЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдЕрдкрдбреЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдореМрдЬреВрдж рд╣реИред

 if (File.Exists("launcher.update") && new Version(FileVersionInfo.GetVersionInfo("launcher.update").FileVersion) > new Version(Application.ProductVersion)) 

рдЪреЗрдХрд╕рдо рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрддрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЕрдкрдбреЗрдЯ рдлрд╝рд╛рдЗрд▓ (" рд▓реЙрдиреНрдЪрд░.рдЕрдкрдбреЗрдЯ ") рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣реИ, рддреЛ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд updater.exe рд╕реБрд╡рд┐рдзрд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ (рдКрдкрд░ рдХреЛрдб рджреЗрдЦреЗрдВ)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЕрдкрдбреЗрдЯ рдлрд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ рдпрд╛ рдЙрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рддрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ:

 if (new Version(Application.ProductVersion) < new Version(doc.GetElementsByTagName("version")[0].InnerText)) 

рдпрджрд┐ рдЕрдзрд┐рдХ рд╣рд╛рд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдФрд░ рдлрд┐рд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВред
рддреАрд╕рд░реА рд╕реНрдерд┐рддрд┐ рддрдм рдорд╛рдиреНрдп рд╣реЛрддреА рд╣реИ рдЬрдм рдкрд╣рд▓реЗ рджреЛ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред

рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдбрд┐рдмрдЧ.рд╕реЗрд╡ (); рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрдврд╝ рд╕рдХреЗрдВред рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЕрджреНрдпрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓реЛрдЧ рдпрд╣ рди рдкреВрдЫреЗрдВ рдХрд┐ "рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреИрдЪ (рдЕрдкрд╡рд╛рдж) {} рдХреНрдпреЛрдВ рд╣реИ , рдпрд╣ il faut рдирд╣реАрдВ рд╣реИред" рдпрд╣рд╛рдБ рдпрд╣ рд╣реИред
рдЖрдЧреЗ рдмрдврд╝реЛред

рдбрд╛рдЙрдирд▓реЛрдб


рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди DownloadFile () рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ ; рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдФрд░ рдЙрд╕рдХрд╛ рдмрд┐рд▓реНрд▓реА рдХреЛрдб рдЖрдк рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 private void DownloadFile(string filename, string xmlVersion, string xmlChecksumm, string localFile = null, bool showStatus = false) { localFile = localFile != null ? localFile : filename; if (File.Exists(localFile) && new FileInfo(localFile).Length == 0) { File.Delete(localFile); } try { if ((File.Exists(localFile) && new Version(FileVersionInfo.GetVersionInfo(localFile).FileVersion) < new Version(xmlVersion)) || !File.Exists(localFile)) { using (var client = new WebClient()) { try { if (showStatus && downloadPercent != null) { client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); } client.DownloadFileAsync(new Uri(url + filename), localFile); if (!Checksumm(localFile, xmlChecksumm) && File.Exists(localFile)) { File.Delete(localFile); } } catch (Exception ex) { debug.Save("private void DownloadFile(string filename, string xmlVersion, string xmlChecksumm)", "Filename: " + filename + Environment.NewLine + "Localname: " + (localFile != null ? localFile : "null") + Environment.NewLine + "URL: " + url, ex.Message); } } } } catch (Exception ex1) { debug.Save("private void DownloadFile(string filename, string xmlVersion, string xmlChecksumm)", "Filename: " + filename + Environment.NewLine + "Localname: " + (localFile != null ? localFile : "null") + Environment.NewLine + "URL: " + url, ex1.Message); } } 

рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╢рдХреНрдд рд╣реИ , рддреЛ рд╣рдо рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
рдЕрдЧрд▓рд╛, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ рдпрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛, рд╣рдо рддрджрдиреБрд╕рд╛рд░ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рд╣рдо рд╢реЛрд╕реНрдЯреИрдЯрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд┐рддрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо / рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдЬрдм рд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╢реЛрд╕реНрдЯреИрдЯрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдбрдкрд╛рд░реНрдЯреЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рд╣рдо WebClient () рд╡рд░реНрдЧ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП ProgressChanged () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ ; рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ DownloadFileAsync () рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ, рдЖрдЧреЗ рдХреНрдпрд╛?
рдФрд░ рдлрд┐рд░ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЪреЗрдХрд╕рдо рдХреЛ рд╡рд░реНрдХрд╢реЙрдк рдореЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ value.xml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЪреЗрдХрд╕рдордо () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдФрд░ рд╕рд╛рдЗрдЯ рд╕реЗ md5 рдХреИрд╢ рдпреБрдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдЪрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред

 private bool Checksumm(string filename, string summ) { try { if (File.Exists(filename) && summ != null && new FileInfo(filename).Length > 0) using (FileStream fs = File.OpenRead(filename)) { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] fileData = new byte[fs.Length]; fs.Read(fileData, 0, (int)fs.Length); byte[] checkSumm = md5.ComputeHash(fileData); return BitConverter.ToString(checkSumm) == summ.ToUpper() ? true : false; } else return false; } catch (Exception ex) { debug.Save("private bool Checksumm(string filename, string summ)", "Filename: " + filename, ex.Message); return false; } } 

рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪреЗрдХрд╕рдо рд╕рд╛рдЗрдЯ рдкрд░ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реИ , рдЕрдиреНрдпрдерд╛ рддрд░реНрдХ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗред
рд▓реЗрдХрд┐рди DownloadFile () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрджрд┐ рдЪреЗрдХрд╕рдо рд╕рд╣реА рд╣реИ, рддреЛ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдЕрднреА рддрдХ рдХреНрдпрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдЙрдо ... рдУрд╣ рд╣рд╛рдБ! рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рд░реЛрд╣:

 Private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) { downloadPercent.Value = e.ProgressPercentage; } 

рдФрд░, рдореИрдВ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рдореЗрдВ, рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЕрдкрдбреЗрдЯ рд▓реЙрдиреНрдЪрд░.рдЕрдкрдбреЗрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд╛ рдЖрд╡реЗрджрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЕрдЧрд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЛрдИ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА "рдорд┐рддреНрд░рддрд╛" рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдкреВрд░реНрдг рдЕрдкрдбреЗрдЯ рдХреЛрдб, рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕реНрд░реЛрдд рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдирд╛рдореЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
PS: рдбрд┐рдмрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдЬрдм рдмрдЪрдд рд╣реЛрддреА рд╣реИ, рддреЛ 3 рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ - рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдореЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдирд╡рдВрдмрд░ 2017 рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рд╛рджрд░, рдПрдВрдбреНрд░рдпреВ рд╣реЗрд▓рдбрд░!

Source: https://habr.com/ru/post/In217627/


All Articles