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 :

[AppDomain] comment contourner une evidence ?


Sujet :

C#

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut [AppDomain] comment contourner une evidence ?
    Bonjour voila je veux creer un app domaine pour faire un beau docallback
    avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AppDomain tempAppDomain = AppDomain.CreateDomain("TempDomainZ");
    tempAppDomain.DoCallBack(loadAssembly);
    AppDomain.Unload(tempAppDomain);
    avec evidement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static void loadAssembly()
    {
        AppDomain.CurrentDomain.SetData(RESULT, "loadAssembly");
    }
    tout cela marche tres en debug
    mais essayez la chose suivante
    dans le repertoire bin\debug changez le nom de votre executable et celui du pdb (ou effacez le pdb)

    lancez le tout et ..... il n'arrive plus a trouver l'assembly d'origine pour la fonction loadAssembly ... c'est ballot !!!

    j'ai bien tenté de lui injecter dans le nouveau domaine l'assembly en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
    AppDomain tempAppDomain = AppDomain.CreateDomain("TempDomainZ");
    Assembly a = tempAppDomain.Load(loadFile(path));
    string s = a.FullName;
    MessageBox.Show(s);
    tempAppDomain.DoCallBack(loadAssembly);
    AppDomain.Unload(tempAppDomain);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static byte[] loadFile(string filename)
    {
        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
        byte[] buffer = new byte[(int)fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        fs.Close();
        return buffer;
    }
    mais le bougre refuse de se soumettre a mon bon vouloir

    kekun a t'il une idée lumineuse ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    d'ailleurs il y a encore plus simple avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void button1_Click(object sender, RoutedEventArgs e)
            {
     
                AppDomain tempAppDomain = AppDomain.CreateDomain("TempDomain");         
                tempAppDomain.DoCallBack(loadAssembly);
                AppDomain.Unload(tempAppDomain);
            }
     
            private static void loadAssembly()
            {
            }
    dans le code courant avec l'executable ca marche
    si on change le nom de l'executable .... ca plante

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Je vais faire le gros lourd, mais pourquoi renommer l'exe?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    en fait je renomme l'exe par ce que je ne veux pas qu'il ai le même nom sur les machines sur lesquelles je l’installe ... en outre il se peut que le même programme puisse être au même endroit dans des versions différentes, c'est un service qui ferra le choix de la version la plus approprié pour l’exécuter.
    donc pas trop le choix

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Je ne sais pas trop ce que tu veux faire exactement, donc je vais peut-être (qui a dit probablement ?) sire des imbécillités (en plus je ne suis pas un pro de l'appdomain) mais si tu mettais ton code multi appdomain dans une DLL. Qui elle, ne sera pas renommée ? Ou alors faire le tout "a la main" avec du marshalling?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    oui mais je peux pas pour des raison simple j'ai qu'un exe lol

  7. #7
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Avec ça, tu peux peut-être modifier dynamiquement les metadatas de l'assembly pour changer le nom de l'assembly ou il doit chercher les classes : http://ccimetadata.codeplex.com/
    Mais bonne chance

    reste le marshalling

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    ce qui est etonnant dans la chose c'est que j'ai deja essayer de charger dynamiquement un assembly que j'avais mis en resource et d'y instancier des classe et ca marchait tres bien ...

    la meme en chargeant l'assembly dans le nouveau domaine ca ne marche pas
    mais je vais tenter de changer dynamiquement les metadata ca pourrait etre une solution sympa

    ce qui serait inetrressant serait de connaitre le mecanisme de chargement des assemblys de savoir si on peut coller un hook dessus ou de au principe substituer une classe a soit

    mais bon ca doit pas interreser grand monde ca lol

    Pour info j'ai meme tenté la chose suivante
    - création du domaine
    - chargement de l'assembly dans le nouveau domaine
    - recherche de la méthode
    - et appel de celle ci
    (et si tu veux je peux te filer le code)

    etonnament elle n'est pas exécuté dans le nouveau domaine ....

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2012, 13h16
  2. Comment contourner un espace sur une requête sql ?
    Par neuneu1 dans le forum Bases de données
    Réponses: 6
    Dernier message: 03/06/2008, 18h31
  3. Comment contourner une règle HTACCESS ?
    Par pdtor dans le forum Apache
    Réponses: 2
    Dernier message: 02/08/2007, 22h38
  4. Comment contourner une erreur Mysql 1093?
    Par cassy dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/05/2007, 17h03
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

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