Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Automatická kontrola aktualizací programu v C#

C# .NET Pro pokročilé Automatická kontrola aktualizací programu v C#

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Pokud máte vlastní program a řešíte problém s aktualizacemi - jak upozornit uživatele na novou verzi programu - Čtěte dál a dozvíte se jak na to.

Jasně, můžete si nastavit napevno datum a pak být nuceni do onoho soudného dne vydat novou verzi, ale je tu i snazší způsob -> zautomatizování.

Nejdříve si načteme aktuální verzi (informace z Assembly -> Version)

Assembly.GetE­xecutingAssem­bly().GetName()­.Version -> tímto dostaneme něco takového 1.0.0.0 -> formát Major, Minor, Build, Revision, ale my bychom raději něco takového -> 1.0 Usekneme zbytek pomocí ToString(2)

Celý kód poté bude vypadat takto:
Pozn.: CultureInfo udává informaci o decimálním separátoru (prostě čárce) jestli bude "." nebo "," InvariantCulture je standard -> "." jinak je v základě podle systémového nastavení (v češtině) ","

using System.Reflection;//pro používání informací z assemblyinfo
using System.Globalization;//pro culture info

double CurrentVersion = double.Parse(Assembly.GetExecutingAssembly().GetName().Version.ToString(2), CultureInfo.InvariantCulture);

 

Pak si naparsujeme soubor, ve kterém budou dva řádky -> 1-> verze; 2-> link (pro přesměrování na soubor)

using System.Net;//pro načtení obsahu souboru z internetu
using System.IO;//pro stream reader

WebRequest request = WebRequest.Create("http://www.itnetwork.cz/scripts/programs_version.php?uniqid=xxxxx");
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());

 

Php soubor vypadá takto:
Pozn.: stačí uložit textový soubor o dvou řádcích php použijte pokud tyto informace ukládáte do databáze

<?php
require_once('mysql.php');
$query = mysql_query('SELECT name, version FROM table WHERE application = "ClockWork" LIMIT 1') or die(mysql_error());
$data = mysql_fetch_assoc($query);

echo(
        $data['version'] . "\nhttp://www.itnetwork.cz/" . $data['name']
);
?>

 

Naparsujeme si ony dva řádky.

using System.Globalization;//pro cultureinfo

double NewestVersion = double.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);//první řádka je verze
string Link = reader.ReadLine();//druhá řádka je link

 

A hodíme tam jednoduchou dotazovací podmínku.

using System.Diagnostics;//pro process.start

if (NewestVersion > CurrentVersion)
{
        if (MessageBox.Show("Ke stažení je dostupná nová verze programu! ("+ NewestVersion.ToString() +")\nPřejete si ji stáhnout?", "Je dostupná aktualizace", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                Process.Start(Link);
}
else
        MessageBox.Show("Používáte poslední verzi!", "Aktualizace nenalezena");

 

Ke stažení přikládám zdrojový kód ukázky se zkompilovaným výsledkem.

Jste redaktorem na ITnetwork?

Pak můžete využít následujícího odkazu:

http://www.itnetwork.cz/smallapps/programs_version.php?uniqid=

Kde za rovná se dosadíte uniqid vašeho programu/hry, který naleznete v administrační sekci v editaci článku hned na začátku.
Výstupem je verze software, tak jak je ukázána v článku -> verze\nodkaz


 

Stáhnout

Staženo 470x (41.76 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Článek pro vás napsal David Jančík [sczdavos]
Avatar
Jak se ti líbí článek?
3 hlasů
Autor je vášnivý programátor v .NET C# a PHP. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity (2)

 

 

Komentáře

Avatar
Gigi_L
Neregistrovaný
Avatar
Gigi_L:16.1.2012 10:09

Zdravim, mozna hloupa otazka, pokud bych potreboval resit tento update ale ne z www ale diskoveho uloziste, jak postupovat + jakym zpusobem rict aplikaci ze se jedna o novou verzi aplikace.
Moje predstava je zazipovana nova verze a u ni v txt souboru info o verzi, jakym zpusobem na to.

Dekuji za odpoved :)

 
Odpovědět 16.1.2012 10:09
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Gigi_L
David Čápka:16.1.2012 10:17

Naprosto stejně jako zde, musíte v nějakých časových intervalech (např. jednou denně) kontrolovat změnu v tom souboru.

Odpovědět 16.1.2012 10:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:26.1.2013 18:13

To CurrentVersion se mi nechce ukázat jako double... nevíte někdo co s tím ?

Editováno 26.1.2013 18:14
 
Odpovědět 26.1.2013 18:13
Avatar
ondra.mares
Člen
Avatar
ondra.mares:27.9.2013 15:35

Mám takový divný problém :D... automatická aktualizace mi funguje na všech počítačích doma ale na kamarádovém ne.. napíše to INTERNAL SERVER ERROR :D nevíte proč to jemu napíše, ale mě to doma na 4 počítačích funguje tak jak má? :D Stejně tak se u něj nepošle z aplikace mail :D. Možná je to chyba v .netu?
Diky za odpověď :)

Editováno 27.9.2013 15:36
 
Odpovědět 27.9.2013 15:35
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:22.7.2014 6:29

Myslím, že toto je již dávno překonané. Jednak bych se pozastavil nad tím proč by C#ista mělsi kazit styl PHPkem ;-)

a jednak když už chci dělat takový kontroly, tak by nebylo od věci tu aplikaci rovnou aktualizovat. A tady ClickOnce nabízí dva v jednom i bez takovýchto berliček.

 
Odpovědět 22.7.2014 6:29
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na Milan Křepelka
David Jančík [sczdavos]:22.7.2014 11:32

Dělal jsem na to kdysi minimalistickou utilitku, kterou lze použít pro jakýkoliv program. Zkontroluje verzi a pokud je nová tak ji stáhne a spustí aktualizaci.
http://universalupdater.codeplex.com/documentation

Odpovědět 22.7.2014 11:32
Čím více času dostaneš, tím méně ho máš.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.