IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Kit de déploiement et mise à jour de chemin dans fichier de config


Sujet :

C#

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut Kit de déploiement et mise à jour de chemin dans fichier de config
    Bonjour,

    j'utilise un setup project pour générer un kit de déploiement pour une appli que j'ai developpée sous Visual Studio 2005
    et j'aimerais savoir s'il était possible, lors du déroulement du kit d'install, de récupérer le chemin du répertoire d'install spécifié par l'utilisateur, afin de mettre à jour des chemins contenus dans les fichiers de config (.exe.config,...) de l'application en cours d'installation??...
    je crois que ce n'est pas possible avec les projets de type Setup Project de Visual Studio (que j'utilise pour l'instant)
    mais y a-t-il d'autres outils qui permettent de le faire?
    Que permettent de faire les projets de type Setup Wizard?

    Autre chose aussi : une fois mon application installée, il faut exécuter un fichier .bat
    serait-il possible d'intégrer l'exécution de ce .bat dans le kit d'instal
    afin que l'utilisateur n'ait pas à faire cette manip?

    merci pour vos réponses...

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Pour réaliser ce que tu veux, il te faut créer une librairie de classe qui sera exécutée via une Custom Action. Ta dll aura pour but de modifier ton fichier de configuration et d'exécuter ton fichier de commande.

    Si tu es anglophone, voici une discussion qui t'explique la démarche à suivre : http://social.msdn.microsoft.com/For...-4f1b5741c02e/

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    yes, ok,
    merci

    j'ai trouvé un super tuto qui explique pas mal tout ça, en plus il est en français...
    et puis cette rubrique de la msdn contient également une mine d'infos...

    Bon, je pense avoir récolté à peu près tout ce qu'il me faut...
    y'a plus qu'à me lancer là-dedans...

  4. #4
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    je crois que ce n'est pas possible avec les projets de type Setup Project de Visual Studio (que j'utilise pour l'instant)
    si c'est complètement possible et je vais t'indiquer une méthode :

    1 °) tu va dans ton projet Setup et tu clique droit "view" -> "user interface", tu crées une TextBoxes et tu rentres un champ SERVER dans les property du label (Edit1Property dans le panel Properties de la textBoxes)

    2°) tu vas dans ton projet Setup et "view" -> "Custom Actions" et tu sélectionnes le "primary output from" de l'install et dans le champ property, tu rentres dans "custom action data" : /SERVER=SERVER (avec un espace à la fin)

    3°) dans le projet que tu veux installer tu fais cliques droit sur le PojectInstaller.cs et "view code"

    4°) dans la méthode install

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);
        Configure(
                Context.Parameters["assemblypath"] + ".config",
                 "#SERVER#", Context.Parameters["SERVER"]);
    // on peut mettre autant de #NOM#, Context.Parameters["NOM"] que l'on veut
    }
    5°) et la méthode Configure qui est une méthode static que tu mets ou tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public static void Configure(string path, params string[] list)
    {
        FileStream fs = File.Open(path, FileMode.Open, FileAccess.ReadWrite);
        byte[] content = new byte[fs.Length];
        int retour = fs.Read(content, 0, content.Length);
     
        if (retour > 0)
        {
            string sContent = ASCIIEncoding.Default.GetString(content);
            for (int cpt = 0; cpt < list.Length; cpt += 2)
                sContent = sContent.Replace(list[cpt], list[cpt + 1]);
                content = ASCIIEncoding.Default.GetBytes(sContent);
                fs.Seek(0, SeekOrigin.Begin);
                fs.Write(content, 0, content.Length);
                fs.SetLength(content.Length);
                fs.Close();
            }
        else
            throw new FileNotFoundException("Impossible to find the configuration file");
    }

    6°) dans le App.config du projet que tu veux installer, tu mets un #SERVER# à l'endroit que tu veux remplacer.

    -- CONCLUSION --

    Tu récupères les param de l'installeur avec :

    Context.Parameters["SERVER"] et tu remplace la valeur #SERVER# de ton fichier de config avec la valeur que tu veux.


    -- Mon Avis --

    une méthode un peu bourrin mais qui fait ses preuves, je suis preneur pour autre chose

    [edit] :

    ok, le temps que j'écrive une réponse et déjà tout de dit ... ^^

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Ouais,
    c'est clair que ça à l'air bien bourrin...

    Je pense que l'on peut faire un peu mieux pour la méthode Configure
    n'a-t-on pas accès à la classe ConfigurationManager afin d'accéder et de modifier les paramètres de mon fichier .exe.config?

    et puis je ne vois pas bien l'utilité de ce champ SERVER
    la variable qui m'intéresse doit justement être Context.Parameters["assemblypath"]
    ...

  6. #6
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    le champ SERVER c'est juste un exemple... c'est parce que c'est un champ qui revient souvent dans mes App.config...

    Pour t'expliquer ce que je fais (rien a voir avec ton pb). Je fais des services windows qui se connecte au démarrage a un serveur pour récupérer des infos (toutes leurs options en fait). on les installe avec des msi et on spécifie le champ serveurs à l'installation, dans un champ du msi.

    J'ai l'impression que ça ressemble à ta question, alors je me suis permis de montrer comment on faisait. Essaie de l'implémenter et tu verras que c'est pas si mal

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    ok,ok,

    et donc,
    on ne peut pas utiliser la classe ConfigurationManager pour accéder aux paramètres de configuration du fichier app.config??

  8. #8
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    En fait je crois que je me fais pas très bien comprendre.. :'(

    La manip' que je te propose se fait à l'installation, une seule fois, elle consiste a remplacer le champ #SERVER# par une vraie valeur que tu saisis à l'installation, dans l'installeur msi.

    Ensuite, tu accède à ton champs de façon normal : ConfigurationManager.AppSettings, ConfigurationManager.Connections, etc.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    oui,
    eh bien j'avais compris

    dans mon cas,
    dans mon fichier de config, j'ai un param
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          <add key="filePath" value="C:\Program Files\Mon Appli\monFichier.xml"/>
    je dois bien pouvoir, depuis la méthode Install ou bien Commit de ma classe Installer faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConfigurationManager.AppSettings.Set("filePath", Context.Parameters["assemblypath"] + @"\monFichier.xml");
    non?

    ça serait plus simple, non?

  10. #10
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    Complètement plus simple, je connaissais pas la méthode set

    mais sinon, si tu veux set un autre attribut, qui est pas un appsetting, etc. et qu'il y a pas de set, ma méthode est utile ^^, c'est plus du vieux parsing de fichier de conf que je propose qu'autre chose. Bon ok, un peu de mauvaise foi ne fais pas de mal :p

    [edit]

    et sinon, je pense qu'il faut de la faire depuis la méthode install

    par contre, "assemblypath" te donne le path + nom de l'assembly donc, ici, ça marcherait pas

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut ça aurait été trop beau...
    ouais,
    bah en fait,
    ça marche pas le Set sur le ConfigurationManager.AppSettings
    car le ConfigurationManager.AppSettings ne renvoie rien...

    donc j'ai utilisé la méthode du tuto dont j'ai mis le lien plus haut...
    ça marche bien

    et donc ta méthode n'est pas si mal dans ton cas...

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    bon bah tout marche comme je veux,

    c'est cool

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déploiement de mise à jour
    Par mexong dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 02/06/2012, 16h59
  2. Déploiement et mises à jour par internet
    Par sk8world dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 03/06/2009, 14h29
  3. Réponses: 0
    Dernier message: 18/02/2008, 14h39
  4. [WB10] Déploiement depuis mise à jour 40k
    Par kwakly dans le forum WebDev
    Réponses: 6
    Dernier message: 18/07/2007, 16h02
  5. Réponses: 7
    Dernier message: 16/06/2007, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo