web-dev-qa-db-fra.com

Comment mettre à jour automatiquement une application sans ClickOnce?

Pour le projet sur lequel je travaille, je ne suis pas autorisé à utiliser ClickOnce . Mon patron veut que le programme ait l'air "réel" (avec un installateur, etc.).

J'ai installé Visual Studio 2012 Professional, et je me suis amusé avec le programme d'installation InstallShield , et cela rend les installateurs agréables, mais je ne vois pas comment activer le logiciel d'installation. l’application de "mise à jour automatique" (c’est-à-dire que lorsqu’elle démarre, elle vérifie qu’elle utilise la dernière version).

On m'a demandé de faire un petit changement au code - changer un ajout à une soustraction, et je ne veux pas vraiment que les gens aient à désinstaller l'ancienne version, puis à réinstaller la nouvelle version à chaque fois que je fais un petit changer comme ça.

Comment puis-je faire en sorte que l'application vérifie les mises à jour et les installe? Ou n'est-ce pas possible (ou pas facile)?

28
Toadums

Il y a déjà beaucoup de questions à ce sujet, alors je vous renvoie à celles-ci.

Une chose que vous voulez vous assurer d’empêcher le besoin de désinstallation est que vous utilisez le même code de mise à niveau à chaque version, mais que vous modifiez le produit code. Ces valeurs sont situées dans les propriétés du projet Installshield.

Quelques références:

21
JYelton

Je pense que vous devriez vérifier le projet suivant à codeplex.com http://autoupdater.codeplex.com/

Cet exemple d’application est développé en C # sous la forme d’une bibliothèque portant le nom de projet "AutoUpdater". Le DLL “AutoUpdater” peut être utilisé dans une application Windows C # (WinForm et WPF).

Il existe certaines fonctionnalités sur AutoUpdater:

  1. Facile à mettre en œuvre et à utiliser.
  2. Ré-exécution automatique de l'application après vérification de la mise à jour.
  3. Processus de mise à jour transparent pour l'utilisateur.
  4. Pour éviter de bloquer le thread principal en utilisant le téléchargement multithread.
  5. Possibilité de mettre à niveau le système et également le programme de mise à jour automatique.
  6. Un code qui n'a pas besoin de changement lorsqu'il est utilisé par différents systèmes et peut être compilé dans une bibliothèque.
  7. Facile pour l'utilisateur de télécharger les fichiers de mise à jour.

Comment utiliser?

Dans le programme que vous souhaitez autoriser à mettre à jour automatiquement, il vous suffit d'appeler la fonction AutoUpdate dans la procédure Main. La fonction AutoUpdate vérifie la version avec celle qui est lue à partir d’un fichier situé dans un site Web/FTP. Si la version du programme est inférieure à celle qui a été lue, le programme télécharge le programme de mise à jour automatique et le lance. La fonction renvoie True, ce qui signifie qu'une mise à jour automatique s'exécutera et que le programme en cours devrait être fermé. Le programme de mise à jour automatique reçoit plusieurs paramètres du programme à mettre à jour et effectue la mise à jour automatique nécessaire puis lance le système mis à jour.

  #region check and download new version program
  bool bHasError = false;
  IAutoUpdater autoUpdater = new AutoUpdater();
  try
  {
      autoUpdater.Update();
  }
  catch (WebException exp)
  {
      MessageBox.Show("Can not find the specified resource");
      bHasError = true;
  }
  catch (XmlException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (NotSupportedException exp)
  {
      bHasError = true;
      MessageBox.Show("Upgrade address configuration error");
  }
  catch (ArgumentException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (Exception exp)
  {
      bHasError = true;
      MessageBox.Show("An error occurred during the upgrade process");
  }
  finally
  {
      if (bHasError == true)
      {
          try
          {
              autoUpdater.RollBack();
          }
          catch (Exception)
          {
             //Log the message to your file or database
          }
      }
  }
  #endregion
5
Anas Naguib

Le moyen le plus courant consiste à placer un simple fichier texte (XML/JSON serait préférable) sur votre serveur Web avec la dernière version de construction. L'application téléchargera ensuite ce fichier, vérifiera la version et lancera le programme de mise à jour. Un fichier typique ressemblerait à ceci:

Fichier de mise à jour de l'application // Chaîne unique permettant à votre application de reconnaître le type de fichier

version: 1.0.0 // dernière version de Assembly

download: http://yourserver.com/ ... // Un lien vers la version téléchargée

redirect: http://yournewserver.com/ ... // J'ai utilisé ce champ en cas de changement d'adresse du serveur. Cela indiquerait au client qu'il doit rechercher une nouvelle adresse.

Vous pouvez également ajouter d'autres détails importants.

2
Samy Arous

La voie des laïcs est

on Main () renommez le fichier .exe en cours d'exécution .exe en vérifiant la date et l'heure de création. et la date de mise à jour du fichier et copier dans le dossier de l'application.

//Rename he executing file
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);

System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension);

puis faites la vérification logique et copiez le nouveau fichier dans le dossier en cours d'exécution

1
Muffaddal Kalla

C'est le code pour mettre à jour le fichier mais pas pour l'installer. Ce programme est conçu avec la méthode DOS pour copier les fichiers à la date la plus récente et exécuter votre programme automatiquement. peut vous aider

ouvrir le bloc-notes et enregistrer le fichier ci-dessous avec l'extension .bat

xcopy \\IP address\folder_share_name\*.* /s /y /d /q  
start "label" /b "youraplicationname.exe"
1
RAMTY