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 :

Une application qui met a jour ses DLL


Sujet :

C#

  1. #1
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut Une application qui met a jour ses DLL
    Bonjour tous le monde ;

    je cherche une idée pour permettre à une application de mettre à jour ses dlls ;

    - décharger une DLL pour la mettre a jour. via la même application que l'utilise

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    On ne peut pas décharger une DLL, tout simplement parce que si elle est chargée, c'est probablement qu'elle est utilisée. Le seul cas où tu peux le faire, c'est quand elle est chargée dans un AppDomain séparé, et dans ce cas tu peux décharger l'AppDomain. C'est d'ailleurs comme ça que fonctionnent (certains) systèmes de plugin.

    Si redémarrer l'appli ne pose pas de problème, la façon la plus simple est sans doute de faire une sorte de bootstrapper : tu lances le bootstrapper, tu arrêtes l'appli, le bootstrapper installe les nouvelles DLL et relance l'appli.

  3. #3
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Regarde Shadow Copy. D'après ce que j'ai compris il faut quand même redémarrer l'application pour que la mise à jour soit effective
    http://msdn.microsoft.com/en-us/library/ms404279.aspx

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par meziantou Voir le message
    Regarde Shadow Copy. D'après ce que j'ai compris il faut quand même redémarrer l'application pour que la mise à jour soit effective
    http://msdn.microsoft.com/en-us/library/ms404279.aspx
    Ah oui, j'avais oublié ça... cela dit, ça règle pas vraiment le problème, du moins pas facilement : tu ne peux pas (à ma connaissance) configurer l'AppDomain de démarrage pour activer Shadow Copy, tu ne peux le faire que pour un nouvel AppDomain. Donc il faudrait que le programme, au démarrage, crée un nouvel AppDomain dans lequel l'application se lance. Bon, c'est pas hyper complexe, mais c'est pas très évident non plus...

  5. #5
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Merci

    est ce qu il est faisable pour une application windows mobile!!!????

  6. #6
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    j'ai trouvé un code extraire de codeProjet

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    using System;
    using System.IO;
     
    namespace Loader
    {
        static class Program
        {
            [LoaderOptimization(LoaderOptimization.MultiDomainHost)]
            [STAThread]
            static void Main()
            {
                /* Enable shadow copying */
     
                // Get the startup path. Both assemblies (Loader and
                // MyApplication) reside in the same directory:
                string startupPath = Path.GetDirectoryName(
    				System.Reflection.Assembly
    				.GetExecutingAssembly().Location);
     
                // cache path = directory where the assemblies get
                // (shadow) copied:
                string cachePath = Path.Combine(
                    startupPath,
                    "__cache");
                string configFile = Path.Combine(
                    startupPath,
                    "MyApplication.exe.config");
                string assembly = Path.Combine(
                    startupPath,
                    "MyApplication.exe");
     
                // Create the setup for the new domain:
                AppDomainSetup setup = new AppDomainSetup();
                setup.ApplicationName = "MyApplication";
                setup.ShadowCopyFiles = "true"; // note: it isn't a bool
                setup.CachePath = cachePath;
                setup.ConfigurationFile = configFile;
     
                // Create the application domain. The evidence of this
                // running assembly is used for the new domain:
                AppDomain domain = AppDomain.CreateDomain(
                    "MyApplication",
                    AppDomain.CurrentDomain.Evidence,
                    setup);
     
                // Start MyApplication by executing the assembly:
                domain.ExecuteAssembly(assembly);
     
                // After the MyApplication has finished clean up:
                AppDomain.Unload(domain);
                Directory.Delete(cachePath, true);
            }
        }
    }
    mais en Windowns mobile le "AppDomainSetup " n'est pas inclus dans framework compact

  7. #7
    Membre habitué
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Points : 144
    Points
    144
    Par défaut
    Bonjour, si tu es sur une application windows mobile, je penses que la page suivante peut t’intéresser :
    http://msdn.microsoft.com/en-us/library/aa446487.aspx

    j'ignore en revanche jusqu'à quelle version c'est valide...

    Si c'est une application mobile, tu devrais pouvoir récupérer le dernier numéro de version et si l'utilisateur est une version en dessous, tu dois pouvoir forcer l'appel au market / marketplace / appstore et ainsi bénéficier des possibilités de mise à jour de l'éditeur de l'os mobile non ?

    de plus, d'après cet article : http://www.smartphonefrance.info/actu.asp?ID=5316
    le marketplace est disponible sous windows mobile 6.x

  8. #8
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Rebonjour tous le monde ;

    j'ai modifié le code pour que puisse l'utiliser dans mon application Windows service.
    pour les applications Windows service comment poutons faire pour avoir un starter

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    static class Program
        {
            static string DomainName = "UpdateAssembly";
            [LoaderOptimization(LoaderOptimization.MultiDomainHost)]
            [STAThread]
            static void Main()
            {
                //string Appexe=WindowsServiceUpdateCenter.ServiceMAJ.
                if (AppDomain.CurrentDomain.FriendlyName != DomainName)
                {
                    /* Enable shadow copying */
     
                    // Get the startup path. Both assemblies (Loader and
                    // MyApplication) reside in the same directory:
                    string startupPath = Path.GetDirectoryName(
                        System.Reflection.Assembly
                        .GetExecutingAssembly().Location);
     
                    string AppExe = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                    // cache path = directory where the assemblies get
                    // (shadow) copied:
                    string cachePath = Path.Combine(
                        startupPath,
                        "__cache");
                    string configFile = Path.Combine(
                        startupPath,
                        "Debug.exe.config");
                    string assembly = Path.Combine(
                        startupPath,
                        AppExe);
     
                    // Create the setup for the new domain:
                    AppDomainSetup setup = new AppDomainSetup();
                    setup.ApplicationName = "UpdateAssembly";
                    setup.ShadowCopyFiles = "true"; // note: it isn't a bool
                    setup.CachePath = cachePath;
                    setup.ConfigurationFile = configFile;
     
                    // Create the application domain. The evidence of this
                    // running assembly is used for the new domain:
                    AppDomain domain = AppDomain.CreateDomain(
                        DomainName,
                        AppDomain.CurrentDomain.Evidence,
                        setup);
     
                    // Start MyApplication by executing the assembly:
                    domain.ExecuteAssembly(assembly);
     
                    // After the MyApplication has finished clean up:
                    AppDomain.Unload(domain);
                    Directory.Delete(cachePath, true);
                }
                else
                {
     
                    string Appdomain = AppDomain.CurrentDomain.FriendlyName;
                    WindowsServiceUpdateCenter.ServiceMAJ ServiceWindows = new WindowsServiceUpdateCenter.ServiceMAJ();
                    ServiceWindows.start(new string[0]);
     
                    Console.ReadLine();
                }
            }
        }
    Je me dit que il faut que je que mon application windows soit comme une scolite genr il fait que demarrer un class par une methode Start
    et je limite mes update seulement sur les DLLs ????
    est ce que c'est une bonne idée

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

Discussions similaires

  1. Réponses: 30
    Dernier message: 08/09/2010, 15h41
  2. Réponses: 1
    Dernier message: 11/06/2008, 19h43
  3. Réponses: 13
    Dernier message: 01/04/2008, 09h43
  4. [VB.NET] Programmer une Application qui tourne sur un PDA?
    Par Bils dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/01/2006, 04h23
  5. [langage] Creer une fonction qui met en majuscule ?
    Par Cyber@l dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2003, 18h44

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