none
Déploiement avec ClickOnce RRS feed

  • Question

  • Bonjour,

     

    Le déploiement ClickOnce de mon appli VB.NET sous XP ne fonctionne plus. J'ai un message d'erreur à l'installation dont les détails figurent ci-dessous.

     

    Le fichier "Auteurs.html" (voir ci-dessous) est inclus dans le projet, avec d'autres. On les retrouve dans les Application Files, avec Publish Status=Include (Auto) et DownloadGroup=(Required).

     

    Evidemment, j'ai fait plusieurs tentatives de publication, en faisant varier des paramètres : toujours pareil !

    Que se passe t'il ?

     

    Merci de vos lumières.

     

     

    ====================== DETAILS DE L'ERREUR ========================

    INFORMATIONS SUR LA VERSION DE LA PLATEFORME
     Windows    : 5.1.2600.131072 (Win32NT)
     Common Language Runtime  : 2.0.50727.1433
     System.Deployment.dll   : 2.0.50727.1433 (REDBITS.050727-1400)
     mscorwks.dll    : 2.0.50727.1433 (REDBITS.050727-1400)
     dfdll.dll    : 2.0.50727.1433 (REDBITS.050727-1400)
     dfshim.dll    : 2.0.50727.1433 (REDBITS.050727-1400)


    RÉSUMÉ DES ERREURS DE LA TRANSACTION DU MAGASIN DE COMPOSANTS
     Aucune erreur de transaction n'a été détectée.

    AVERTISSEMENTS
     Aucun avertissement n'a été émis pendant cette opération.

    ÉTAT DE LA PROGRESSION DE L'OPÉRATION
     * [08/07/2008 14:04:06] : L'activation de http://xxx.application a commencé.
     * [08/07/2008 14:04:06] : Traitement du manifeste de déploiement terminé.
     * [08/07/2008 14:04:06] : L'installation de l'application a commencé.
     * [08/07/2008 14:04:09] : Traitement du manifeste de l'application terminé.
     * [08/07/2008 14:04:21] : Requête de confiance et détection de plateforme terminée.

    DÉTAILS DE L'ERREUR
     Les erreurs suivantes ont été détectées au cours de cette opération.
     * [08/07/2008 14:05:15] System.Deployment.Application.InvalidDeploymentException (HashValidation)
      - Le fichier Auteurs.html possède un hachage calculé différent de celui spécifié dans le manifeste.
      - Source : System.Deployment
      - Trace de la pile :
       à System.Deployment.Application.ComponentVerifier.VerifyFileHash(String filePath, Hash hash)
       à System.Deployment.Application.ComponentVerifier.VerifyFileHash(String filePath, HashCollection hashCollection)
       à System.Deployment.Application.ComponentVerifier.FileComponent.Verify()
       à System.Deployment.Application.ComponentVerifier.VerifyComponents()
       à System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options)
       à System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp)
       à System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
       à System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension)
       à System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

    DÉTAILS DE LA TRANSACTION DU MAGASIN DE COMPOSANTS
     Aucune information disponible sur la transaction.

    ========================================================

    mardi 8 juillet 2008 12:30

Réponses

  • Bonjour Gilles,

     

    ça y est, j'ai trouvé l'origine du problème et je l'ai corrigé. Mes deux versions fonctionnent maintenant.

     

    Voici l'affaire :

    Je déploie ces deux versions linguistiques avec un programme Setup classique. Je n'utilise pas ClickOnce car je n'ai pas réussi à déployer les fichiers de données associés au programme.

    Or, sur la version qui fonctionne j'ai la propriété : Enable ClickOnce Security + full trust

    alors que sur celle qui refuse l'accès à la Registry : Desable ClickOnce Security.

     

    J'ai simplement comparé les propriétés des deux versions pour m'appercevoir de cette différence (qui ne concerne que ClickOnce, que pourtant je n'utilise pas).

     

    J'ai ensuite simplement fait Enable ClickOnce Security et mon appli fonctionne !

     

    A mon sens le problème est lié une question de cohérence de l'IHM de VS 2008.

     

    J'ai bien noté votre recommandation concernant l'utilisation de la HKEY_LOCAL_MACHINE et je constate que Vista reroute l'accès vers une clé virtuelle.

     

    Je vais maintenant retester le déploiement de fichiers de données avec ClickOnce car je souhaite en finale utiliser ses facilités de mise à jour.

     

    Encore merci de votre aide.

    Bien cordialement

    mardi 15 juillet 2008 10:02

Toutes les réponses

  • Bonjour,

     

    Il faut regénerer le manifeste de déploiement (Republier votre application).

    Il faut savoir que lorsque vous publier une application ClickOnce, il n'est plus possible d'ajouter ou de modifier les fichiers présent dans le répertoire de déploiement (c'est une sécurité afin qu'un petit malin ne remplace pas ces fichiers par du code malveillant).

     

    Cordialement

     

    mercredi 9 juillet 2008 20:37
    Modérateur
  • Je comprends qu'il n'est pas possible à un tiers de modifier quoi que ce soit sur mon serveur.

    Mais que je peux, en tant qu'éditeur, ajouter des répertoires et des fichiers de données en republiant mon appli.

     

    L'erreur ci-dessus persiste malgré plusieurs republications.

    mercredi 9 juillet 2008 20:53
  • Bonsoir,

     

    Avez-vous essayé de republier l'application dans un autre répertoire ?

     

    Cordialement

     

    mercredi 9 juillet 2008 20:56
    Modérateur
  • Non, mais je vais essayer.

    Cependant, s'il faut changer de répertoire, comment une application déployée pourrait-elle se mettre à jour ?

     

    J'ai oté les fichiers de données de mon appli et j'ai pu la publier ainsi.

    Mais dès que j'ajoute des fichiers, alors la même erreur revient à la fin de l'installation : Le fichier Auteurs.html possède un hachage calculé différent de celui spécifié dans le manifeste.

     

    J'ajoute que cela fonctionne sur mon poste de développement mais que l'erreur apparait sur un autre ordi...

     

    Savez-vous quelle pourrait être la cause de cette différence de hachage ?

     

    Merci de votre aide.

    mercredi 9 juillet 2008 21:15
  • Bonsoir,

     

    Cependant, s'il faut changer de répertoire, comment une application déployée pourrait-elle se mettre à jour ?

    C'est juste pour tester... Essayer de déployer l'application dans un autre répertoire.

     

    J'ai oté les fichiers de données de mon appli et j'ai pu la publier ainsi.

    Mais dès que j'ajoute des fichiers, alors la même erreur revient à la fin de l'installation : Le fichier Auteurs.html possède un hachage calculé différent de celui spécifié dans le manifeste.

    Comment "ajoutez" vous les fichiers ?

     

    En fait est-ce que le fichier Auteurs.html change entre le moment ou vous publiez l'application et au moment lancez l'application ? Utilisez vous un déploiement personnalisé dans votre code (Utilisez vous les classes System.Deployment.Application dans votre code) ?

     

    Cordialement

    mercredi 9 juillet 2008 21:21
    Modérateur
  • J'ai effectué la publication dans un autre répertoire : même résultat.

     

    Pour ajouter les fichiers de données a l'application :

    1. J'ai ajouté le répertoire "Help" au projet puis le sous-répertoire "Images"
    2. J'ai ajouté des fichiers existants par ailleurs (Add, Items existants) dans Help et dans Help/Images
    3. J'ai vérifié que les Build Action étaient initialisés à Content
    4. Dans L'onglet Publish, Applications Files, tous les fichiers ajoutés étaient bien présents avec un Publish Status Include (Auto)
    5. C'est tout.

    J'ai publié l'appli ainsi.

     

    Le fichiers Auteurs.html est le premier (par ordre alpha) de ceux contenus dans Help.

     

    Dans l'onglet Signing j'ai :

    • Sign the ClickOnce manifests
    • Sign assembly
    • spécifié un fichier .snk

     

     

    mercredi 9 juillet 2008 21:40
  • J'ajoute que sur Vista l'appli s'installe correctement et se lance automatiquement. Mais elle signale une erreur à chaque accès qu'elle fait à la Registry.

     

    Comment éviter ce problème de Registry ? L'application est full trust. Vista est ed. Familiale Premium, tout neuf.

     

    Merci

     

    mercredi 9 juillet 2008 22:29
  • Bonjour,

     

    L'application sur le poste XP qui pose problème, a-t-elle déjà été executé ? Si oui, désinstaller là dans Ajout/Supp de programme. Et essayez de réexécuter l'application.

     

    J'ajoute que sur Vista l'appli s'installe correctement et se lance automatiquement. Mais elle signale une erreur à chaque accès qu'elle fait à la Registry.

     

    Dans quelle clé accédez vous ? Avez-vous vérifié via regedit si vous avez les droits nécessaires pour y accéder ?

     

    Cordialement

     

    jeudi 10 juillet 2008 19:38
    Modérateur
  • Bonjour,

     

    Code Snippet

    L'application sur le poste XP qui pose problème, a-t-elle déjà été executé ? Si oui, désinstaller là dans Ajout/Supp de programme. Et essayez de réexécuter l'application.

     

     

    Oui, elle a fonctionné et je l'ai déjà désinstallée plusieurs fois.

     

    Devant ces difficultés je suis revenu pour le moment à un Setup classique pour chacune de mes deux versions linguistiques (fr-FR et en-US).

     

    Elles s'installent bien et fonctionnent correctement sous XP.

    La version française s'installe et fonctionne bien sous Vista, en particulier l'accès à la Registry ( HKEY_LOCAL_MACHINE / SOFTWARE ) fonctionne où je crée de nouvelles clés.

     

    Mais la version anglaise plante lors de l'accès à cette clé qui a lieu dès le début de l'appli (le splash screen s'affiche). Remarque : hier c'est avec cette même version anglaise que rencontrais des problèmes.

     

    Donc, en résumé : la version française s'installe avec Setup et fonctionne bien sur les deux OS. La version anglaise fonctionne sous XP mais pas sous Vista (problème d'accès à la Registry).

     

    Pourrait-il y avoir une raison à cela sous Vista ?

    Le code est strictement le même dans les deux version (sur ce point).

     

    Merci de vos lumières.

    jeudi 10 juillet 2008 20:19
  • Bonjour,

     

    J'ai de plus en plus de mal à comprendre ce qui se passe...

     

    L'écriture dans HKEY_LOCAL_MACHINE nécessite les droits administrateurs.

    Cela ne pose pas de problème sous XP, car je suppose que vous utilisez un compte administrateur.

    Sous Vista, il faut élever ses privilèges pour exécuter une telle application, en lancant celle-ci en administrateur.

     

    Il en est de même avec click-once, il faudra lancer l'application en tant qu'administrateur si vous souhaitez écrire dans HKEY_LOCAL_MACHINE.

     

    Cela n'explique pas pourquoi la version fr fonctionne et pas celle en anglais...

    Peut-être qu'avec la version fr, il n'y a rien à écrire dans le registre (car déjà existant) ???

     

    Cordialement

     

    jeudi 10 juillet 2008 20:50
    Modérateur
  • Bonjour,

     

    J'avais initialement pensé à un problème de déploiement avec ClickOnce car il est apparu avec l'essai de déploiement ClickOnce. Mais en fait le problème n'est pas là car il se produit de la même façon avec un déploiement Setup.

     

    Mes deux versions de programme (français et anglais) accèdent à la clé de registre HKEY_LOCAL_MACHINE / SOFTWARE.

     

    Sur XP, pas de problème avec les deux versions. 

    Sur Vista ed Familiale Premium, avec la version française du programme on retrouve les informations écrites, non dans la clé visée mais dans :

    HKEY_CURRENT_USER

    Software

    Classes

    VirtualStore

    MACHINE

    SOFTWARE

     

    HKEY_USERS

    s-1-5-21<suite de chiffres>

    Software

    Classes

    VirtualStore

    MACHINE

    SOFTWARE

     

    La version française fonctionne comme si de rien n'était. Il y a donc un reroutage opérationnel quelque par, lors de l'accès au registre.

    Sur sa version anglaise le programme lève une exception lors de l’accès à la clé.

     

    Il y a une différence de comportement de Vista vis à vis du registre, en fonction de la langue. Voilà mon analyse actuelle.

    Avez-vous des informations à ce sujet ?

    P.S.1. : Je serai éloigné d'Internet pendant quelques jours et ne pourrai pas poursuivre cet échange, dont je vous remercie, car il est très important de se sentir connecté avec la communauté...

    P.S.2. : Ma machine Vista est toute récente et mon compte utilisateur est un compte Administrateur ordinaire, c'est à dire créé sans droit particulier.

     

     

    vendredi 11 juillet 2008 09:28
  • Bonjour,

     

    Avez-vous essayé de déboguer votre application pour être sûr que la version anglaise écrit bien au même endroit dans le registre ?

    Est-il possible de voir les clés auquels votre application écrit réellement ? (Dans votre code)

     

    Cordialement

     

    vendredi 11 juillet 2008 10:20
    Modérateur
  • Ouf, juste avant de partir,

    et merci de votre réponse rapide.

     

    Code Snippet

    Avez-vous essayé de déboguer votre application pour être sûr que la version anglaise écrit bien au même endroit dans le registre ?

     

     

    Non, pas encore car il faut que j'installe l'environnement de développement sur Vista. Je développe actuellement sur XP (là ça fonctionne bien). Je vais le faire rapidement et je vous tiendrai au courant.

     

    Pour les clés, je suppose que vous souhaitez voir le code utilisé. En voici un extrait.

     

    Code Snippet

    Imports Microsoft.Win32

    Imports System.Threading

     

    Module MyRegistry

     

    #Region "Contexte Registry"

    Public BaseKey As String = "SOFTWARE\\ABC Prog"

    Public NameKey As String = "Météo"

     

    Public PathKey As String = BaseKey + "\\" + NameKey

    #End Region

     

    '-- Ecrire le paramètre "name" de valeur "val"

    Public Sub SetParamInKey(ByVal name As String, ByVal val As System.Object)

    Dim Key As RegistryKey = Nothing

    Try

    Key = Registry.LocalMachine.CreateSubKey(PathKey)

    Key.SetValue(name, val)

    Catch ex As Exception

    MsgBox(ex.Message, MsgBoxStyle.Critical, NameKey)

    Finally

    If Not Key Is Nothing Then Key.Close()

    End Try

    End Sub

     

    '--- Lire la valeur du paramètre "name"

    Public Function GetParamInKey(ByVal name As String, ByVal val As System.Object) As System.Object

    Dim Key As RegistryKey = Nothing

    Try

    Key = Registry.LocalMachine.CreateSubKey(PathKey)

    GetParamInKey = Key.GetValue(name, val)

    Catch ex As Exception

    MsgBox(ex.Message, MsgBoxStyle.Critical, NameKey)

    GetParamInKey = val

    Finally

    If Not Key Is Nothing Then Key.Close()

    End Try

    End Function

     

    '-- Supprimer le paramètre "name"

    Public Sub DeleteParamInKey(ByVal name As String)

    Dim Key As RegistryKey = Nothing

    Try

    Key = Registry.LocalMachine.CreateSubKey(PathKey)

    Key.DeleteValue(name)

    Catch ex As Exception

    Finally

    If Not Key Is Nothing Then Key.Close()

    End Try

    End Sub

     

     

    Merci encore de votre aide.

    A bientôt

    vendredi 11 juillet 2008 12:57
  • Bonjour,

     

    P.S.1. : Je serai éloigné d'Internet pendant quelques jours et ne pourrai pas poursuivre cet échange, dont je vous remercie, car il est très important de se sentir connecté avec la communauté...

    = Je pars en vacances !

     

    Le code est correct, je ne sais vraiment pas pourquoi sous Vista, votre logiciel en fr fonctionne bien contrairement à celui qui est en anglais...

    Ecrivez vous des valeurs différentes entre ces 2 versions ?

     

    Juste une remarque :

    Il n'est vraiement pas conseillé d'écrire dans HKEY_LOCAL_MACHINE de manière générale(à moins que celui-ci soit destiné à des administrateurs).

    Si vous devez écrire des choses, faites-le à l'installation, car c'est le seul moment où Windows demandera à l'utilisateur des droits Administrateur.

     

    Cordialement

     

    vendredi 11 juillet 2008 20:13
    Modérateur
  • Bonjour Gilles,

     

    ça y est, j'ai trouvé l'origine du problème et je l'ai corrigé. Mes deux versions fonctionnent maintenant.

     

    Voici l'affaire :

    Je déploie ces deux versions linguistiques avec un programme Setup classique. Je n'utilise pas ClickOnce car je n'ai pas réussi à déployer les fichiers de données associés au programme.

    Or, sur la version qui fonctionne j'ai la propriété : Enable ClickOnce Security + full trust

    alors que sur celle qui refuse l'accès à la Registry : Desable ClickOnce Security.

     

    J'ai simplement comparé les propriétés des deux versions pour m'appercevoir de cette différence (qui ne concerne que ClickOnce, que pourtant je n'utilise pas).

     

    J'ai ensuite simplement fait Enable ClickOnce Security et mon appli fonctionne !

     

    A mon sens le problème est lié une question de cohérence de l'IHM de VS 2008.

     

    J'ai bien noté votre recommandation concernant l'utilisation de la HKEY_LOCAL_MACHINE et je constate que Vista reroute l'accès vers une clé virtuelle.

     

    Je vais maintenant retester le déploiement de fichiers de données avec ClickOnce car je souhaite en finale utiliser ses facilités de mise à jour.

     

    Encore merci de votre aide.

    Bien cordialement

    mardi 15 juillet 2008 10:02
  • Bonjour,

     

    J'ai simplement comparé les propriétés des deux versions pour m'appercevoir de cette différence (qui ne concerne que ClickOnce, que pourtant je n'utilise pas).

     

    J'ai ensuite simplement fait Enable ClickOnce Security et mon appli fonctionne !

     

    A mon sens le problème est lié une question de cohérence de l'IHM de VS 2008.

    J'ai noté votre remarque, je vais essayer de la faire remonter à Microsoft

     

    J'ai bien noté votre recommandation concernant l'utilisation de la HKEY_LOCAL_MACHINE et je constate que Vista reroute l'accès vers une clé virtuelle.

    Oui, et la racine de clé "virtuelle" est tout simplement HKEY_CURRENT_USER et ne sera donc pas visible par les autres utilisateurs. Cela n'a donc pas de sens d'écrire dans HKEY_LOCAL_MACHINE... Cette redirection permet aux anciennes applications (XP et inférieures) de continuer à s'exécuter sous Vista, moyennant quelques effets secondaires...

     

    Je vous conseil donc fortement d'écrire dans HKEY_CURRENT_USER afin de vous prémunir d'éventuelles problèmes plus-tard...

     

    Cordialement

    mercredi 16 juillet 2008 05:53
    Modérateur
  • Bonsoir,

     

    Ok Gilles, merci de votre aide.

     

    dimanche 20 juillet 2008 20:44