Automatická kontrola aktualizací programu v C#

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

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 devbooku?

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 465x (41.76 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Článek pro vás napsal David Jančík [sczdavos]
Avatar
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í.

Jak se ti líbí článek?
Celkem (3 hlasů) :
4.666674.666674.666674.666674.66667


 



 

 

Komentáře

Avatar
Gigi_L
Neregistrovaný
Avatar
Gigi_L:

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:

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:

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:

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:

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
Odpovídá na Milan Křepelka
David Jančík [sczdavos]:

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.