2008-12-18 6 views
2

En utilisant C#, est-il possible de se connecter à une application en cours d'exécution (ma propre application) et d'obtenir une instance d'une classe? À l'heure actuelle, je le faisObtenir une instance d'une classe dans un processus en cours

// Find the IAutomation interface. 
Type[] types = assembly.GetTypes(); 

foreach (Type type in types) 
{ 
    if (!type.IsAbstract && type.GetInterface("IAutomation") != null) 
     automation = (IAutomation)Activator.CreateInstance(type); 
} 

Cela crée une nouvelle instance de l'application à chaque fois. Je ne veux pas d'application singleton! Je veux attacher à une instance existante (si elle existe) et arracher IAutomation à partir de là.

Est-ce encore possible?

Répondre

2

Vous pouvez utiliser remoting ou faire de votre instance existante un serveur COM et utiliser COM interop à l'instance existante.

Peut-être qu'il existe des API de débogage que vous pouvez également utiliser, mais que je ne considérerais pas comme propres.

0

S'il existe une instance existante de l'interface IAutomation dans AppDomain, il doit y avoir quelque chose qui pointe vers elle, sinon elle serait récupérée. Vous devrez donc identifier ce qui pointe vers l'instance et l'utiliser pour obtenir l'instance. Vous devriez vous poser des questions telles que: Qui a créé l'instance? C'est probablement cet objet qui contient la référence.

Questions connexes