69 votes

Comment afficher le numéro de version ClickOnce sur Windows Forms

J'ai une application windows forms qui est déployé à deux endroits différents.

  • Intranet - ClickOnce
  • Internet est Installé sur une batterie de serveurs citrix par le biais de programme d'installation de Windows

Je l'affichage ClickOnce numéro de version de sur-une fois déployé la versionApplicationDeployment.IsNetworkDeployed.

if (ApplicationDeployment.IsNetworkDeployed)
        return ApplicationDeployment.CurrentDeployment.CurrentVersion;

Mais pour les non-cliquez sur l'application, je ne suis pas sûr de la façon de récupérer version clickonce à moins que j'ai coder en dur le numéro de version dans l'assemblée de l'info.

Est-il un moyen automatique de récupérer ClickOnce numéro de version pour les non-clickonce version déployée?

109voto

cpg Points 311
  1. Ajouter une référence d'assembly System.Deployment à votre projet.

  2. Importer l'espace de noms dans le fichier de la classe:

    VB.NET:

    Imports System.Deployment
    

    C#:

    using System.Deployment;
    
  3. Récupérer la version ClickOnce de l' CurrentVersion de la propriété.

    Vous pouvez obtenir la version actuelle de l' ApplicationDeployment.CurrentDeployment.CurrentVersion de la propriété. Ceci renvoie à un System.Version objet.

    Remarque (à partir de MSDN):

    CurrentVersion diffèrent UpdatedVersion si une nouvelle mise à jour a été installé, mais vous n'avez pas encore appelé l' Restart. Si le déploiement manifeste est configuré pour effectuer les mises à jour automatiques, vous pouvez comparer ces deux valeurs pour déterminer si vous devez redémarrer l'application.

    REMARQUE: L' CurrentDeployment statique de la propriété est valide seulement lors de l'application a été déployée avec ClickOnce. Par conséquent, avant d'accéder à cette propriété, vous devriez vérifier l' ApplicationDeployment.IsNetworkDeployed de la propriété première. Il retournera toujours un faux dans l'environnement de débogage.

    VB.NET:

    Dim myVersion as Version
    
    If ApplicationDeployment.IsNetworkDeployed Then
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion
    End If
    

    C#:

    Version myVersion;
    
    if (ApplicationDeployment.IsNetworkDeployed)
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion;
    
  4. Utiliser l' Version objet:

    À partir de là, vous pouvez utiliser les informations de version dans une étiquette, par exemple sur un "Sujet", de cette façon:

    VB.NET:

    versionLabel.Text = String.Concat("ClickOnce published Version: v", myVersion)
    

    C#:

    versionLabel.Text = string.Concat("ClickOnce published Version: v", myVersion);
    

    (Version des objets sont mis en forme sous la forme de quatre pièces principales.mineure.construire.de révision).)

15voto

JaredPar Points 333733

Non, je ne crois pas qu'il y ait un moyen. Je crois que les informations sur ClickOnce proviennent du manifeste qui ne sera disponible que dans un déploiement ClickOnce. Je pense que coder en dur le numéro de version est votre meilleure option.

8voto

RobinDotNet Points 8026

Je voudrais simplement que la version d'assemblage de l'assembly principal soit identique à celle de CLickOnce à chaque fois que vous publiez une nouvelle version. Ensuite, lorsqu'il s'exécute en tant qu'application sans clic, utilisez simplement Reflection pour sélectionner la version d'assemblage.

3voto

gev Points 29

Ce n’est pas le cas trois ans plus tard, mais j’ai fini par analyser le fichier manifeste avec le lecteur xml.

2voto

Billy Coover Points 1862

Code dur, ou ... Gardez une trace de vos versions (fichier, assemblage, déploiement) dans une base de données. Appelez la base de données avec votre assembly et obtenez la version de déploiement.

Cela suppose que vous incrémentez vos versions de manière logique, de sorte que chaque type de version ait une relation. C'est beaucoup de travail pour un problème aussi mineur. J'irais personnellement avec la solution de Jared; bien que je déteste coder dur quoi que ce soit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X