2010-10-21 8 views
0

Comment parcourir les domaines d'application dans l'assemblage?C#: parcourir les domaines d'application dans l'assemblage

+3

Quelle est la question ici? Voulez-vous savoir combien de domaines d'applications s'exécutent dans un processus? Quelle est l'exigence? –

+1

essayez ceci: http://groups.google.com/group/microsoft.public.dotnet.framework.clr/msg/9df14bf0af393c28?pli=1 – PRR

Répondre

1

En supposant que vous voulez dire « dans le processus » ... un AppDomain est un élément important que vous devriez vraiment savoir lorsque vous créez un, et suivre/gérer la durée de vie. Il n'y a pas un facile moyen de trouver tous les AppDomain s dans le processus, AFAIK.

3

Source: Thomas Scheidegger

Vous devez ajouter ce qui suit comme une référence COM - ~ \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscor ee.tlb. Cela fonctionne avec l'exécution de currnet assembly. Si vous voulez boucler des processus, puis obtenir appdomain, cela peut ne pas être possbile.

public void GetAllAppDomains() 
      { 

       AppDomain one = AppDomain.CreateDomain("One"); 
       AppDomain two = AppDomain.CreateDomain("Two"); 
       // Creates 2 app domains   

       List<AppDomain> appDomains = new List<AppDomain>(); 

       IntPtr enumHandle = IntPtr.Zero; 

       CorRuntimeHostClass host = new CorRuntimeHostClass();   

       try 
       { 

        host.EnumDomains(out enumHandle); 

        object domain = null; 

        AppDomain tempDomain; 

        while (true) 
        { 

         host.NextDomain(enumHandle, out domain); 

         if (domain == null) 
         { 
          break; 
         } 

         tempDomain = domain as AppDomain; 

         appDomains.Add(tempDomain); 

        }    

       } 

       catch (Exception ex) 
       { 
        Console.WriteLine(ex.ToString());   
       } 

       finally 
       { 
        host.CloseEnum(enumHandle); 
        int rel= Marshal.ReleaseComObject(host); 
       } 

       Assembly[] assemblies; 
       foreach (AppDomain app in appDomains) 
       { 
        Console.WriteLine(app.FriendlyName); 

        assemblies = app.GetAssemblies(); 

        Console.WriteLine("-----------------------Assemblies------------------"); 
        foreach (Assembly assem in assemblies) 
        { 
         Console.WriteLine(assem.FullName); 
        } 
        Console.WriteLine("---------------------------------------------------"); 
       } 

      } 
+0

+1 car je ne pensais même pas que c'était possible. – Kleinux

Questions connexes