none
C# Vérifier si une mise à jour logicielle est disponible RRS feed

  • Discussion générale

  • Titre : C# Vérifier si une mise à jour logicielle est disponible

    Voici un petit tutorial pour intégrer une fonction de vérification de mise à jour pour vos programmes.

    La solution que je vais vous proposer consiste à comparer la somme md5 du fichier en cours d'exécution et celle d'un fichier hébergé sur un serveur distant.

    1) Création de la fonction :

        static void VerifUpdate()
        {
          //On récupère la valeur md5 de notre fichier
          FileStream fichier = new FileStream(Process.GetCurrentProcess().MainModule.FileName, FileMode.Open, FileAccess.Read);
          MD5 md5 = new MD5CryptoServiceProvider();
          byte[] monMd5 = md5.ComputeHash(fichier);
          fichier.Close();
    
          StringBuilder sb = new StringBuilder();
          for (int i = 0; i < monMd5.Length; i++)
          {
            sb.Append(monMd5[i].ToString("x2"));
          }
    
          //Connexion au serveur distant et récupération de la valeur md5
          WebRequest maRequete = HttpWebRequest.Create("http://www.monsite.com/fichier.exe");
          WebResponse maReponse = maRequete.GetResponse();
          byte[] remoteMd5 = md5.ComputeHash(maReponse.GetResponseStream());
          StringBuilder sb1 = new StringBuilder();
          for (int i = 0; i < remoteMd5.Length; i++)
          {
            sb1.Append(remoteMd5[i].ToString("x2"));
          }
    
          //Comparaison des 2 valeurs
          if (sb.ToString() != sb1.ToString())
          {
            //Les valeurs sont différentes, une mise à jour est disponible
            MessageBox.Show("Une mise à jour est disponible, visitez notre site : http://www.monsite.com/fichier.exe");
          }    
        }
    

    2) Création d'un thread pour ne pas "freezer" l'application pendant la connexion au serveur distant :

    public Thread UpdateThread = new Thread(new ThreadStart(VerifUpdate));
    

    3) Vérification à l'ouverture du programme :

        private void Form1_Load(object sender, EventArgs e)
        {
          UpdateThread.Start(); 
        }
    
    Ce code peut-être amélioré en ajoutant des try/catch et une meilleure gestion des erreurs mais constitue une bonne base de départ!

     

     

    • Fractionné Alex Petrescu mardi 1 février 2011 11:18 meilleur article
    mercredi 26 janvier 2011 17:52

Toutes les réponses