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

рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ, рдореЗрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- Ionic.Zip.dll - рд╕рдВрдЧреНрд░рд╣ рдбреАрдмрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди;
- LanguagePack.dll - рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдлреЙрд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рдирд╛рдо рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ;
- Newtonsoft.Json.dll - JSON рд▓рд╛рдЗрдмреНрд░реЗрд░реА;
- ProcessesLibrary.dll - рдЗрд╕рдХреА рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ;
- restart.exe - рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
- updater.exe - рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛
- settings.xml - рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ред
рдХреЛрдб рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рдереАред рдЪреЗрдХрд╕рдо рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдерд╛, рдЬреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
рддреЛ рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЙрд╕реА рдХрд╣рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреАрд╕рд░рд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд
рд╕рдВрд╕реНрдХрд░рдг ред
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(); }
рдЕрдм рд╕рдм рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред
рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ (
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)
рдЬрд╣рд╛рдВ:
- рдлрд╝рд╛рдЗрд▓ рдирд╛рдо - рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо;
- xmlVersion - рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг ( version.xml рд╕реЗ рдкрдврд╝реЗрдВ);
- xmlChecksumm - рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЪреЗрдХрд╕рдо рд╡рд╛рд▓рд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ( рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрдврд╝реЗрдВред xml );
- рд▓реЛрдХрд▓рдлрд╛рдЗрд▓ - рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░, рдЕрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд┐рдд рдирд╛рдо рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
- showStatus рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рд╕реНрдерд┐рддрд┐ рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреА рдпрд╛ рдирд╣реАрдВред рдХреЗрд╡рд▓ LocalFile рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлрдВрдХреНрд╢рди
рдЯрд╛рд╕реНрдХ.рдлреИрдХреНрдЯрд░реАред рд╕рд╛рд░реНрдЯрдиреНрдпреВ (); рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдм рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛,
рдЯрд╛рд╕реНрдХ.рдРрдЯрдПрдЯрд▓ рдлрд╝рдВрдХреНрд╢рди
(рдЯрд╛рд╕реНрдХ 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 рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ
рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рд╛рджрд░, рдПрдВрдбреНрд░рдпреВ рд╣реЗрд▓рдбрд░!