2009-02-19 6 views
1

Je ne suis pas sûr de savoir comment vous poser la question, mais j'essaie de comprendre s'il existe un moyen par lequel je peux accéder à un processus en cours écrit purement en. Net et interagir avec son espace mémoire et ses objets actifs.Connectez-vous au programme logiciel .Net et interagissez

Je fais le développement de compléments pour 2 paquets de point de vente, et j'essaie de comprendre ceci pour l'analyse de la saisie de données dans une fenêtre externe. Toute information ou idée serait appréciée.

Pour donner un tour différent à ce que je demande ... fondamentalement, est-il possible d'utiliser le system.diagnostics.processmodule et d'attraper un processus en cours avec un nom particulier, puis d'instancier cela en tant qu'application , puis creuser dedans pour trouver un objet statique particulier, et travailler avec?

---- ---- supplémentaires

J'ai remarqué quelqu'un mentionné au sujet de la réflexion ... cela peut en effet être ce que je suis en train de demander ... La seule chose que je dois est peut-être « Réfléchissez "un processus, trouver une classe statique particulière, puis transtyper cette classe en un" objet ", afin que je puisse accéder à ses propriétés ... peut-être que cela a plus de sens. Malheureusement, le programme avec lequel j'essaye de travailler n'aura aucune forme d'architecture de plug-in pendant un certain temps, et je pensais pouvoir le faire en utilisant une sorte de P/Invoke ou de réflexion.

Répondre

-1

Facilement, non.

Mais il est possible d'automatiser WinDBG (ou sa version en ligne de commande), avec la bibliothèque d'extension SOS pour .NET.

Fondamentalement, vous avez besoin d'une application conçue pour l'extensibilité/les plug-ins/l'automatisation. Une autre possibilité est d'exploiter le fait que .exe est à peu près la même chose que .dll et avoir une application qui charge l'exe comme s'il s'agissait d'une bibliothèque de classes, puis le démarre. La réflexion serait alors possible.

1

Rechercher .NET remoting. En termes simples, vous pouvez créer un service de fenêtre ou une application de console qui crée un objet, un objet personnalisé que vous créez. Vous pouvez ensuite vous inscrire sur un port TCP.

Ensuite, vous avez un serveur client qui peut accéder au même port TCP, peut même être sur 2 PC différents, et interagir avec l'objet.

La méthode consiste à créer une interface que l'objet client connaît et que le serveur implémente.

Vous pourriez avoir deux applications de console qui se parlent. Voici un question sur la façon de faire cela, ce n'est pas tout à fait exact, mais devrait vous faire pointer dans la bonne direction.

0

Une autre option, si vous n'avez pas besoin de changer les choses, mais plutôt de rechercher uniquement des statistiques, est de créer des compteurs de performance personnalisés, puis de les surveiller avec une autre application. Monitoring Performance Thresholds

+0

Ce que je dois être capable de faire est de se connecter à un processus, et entrer dans le fil STA. Une fois dedans, je dois obtenir un objet statique qui s'exécute dans le thread STA, et être capable de travailler avec. –

0

Il y a un espace de noms .NET spécialement conçu pour cela,

System.AddIn 

Vous devez ajouter une référence à la dll (disponible uniquement en .net 3.5).Vous pouvez utiliser cette classe pour développer une architecture de plugins typesafe prenant en charge la gestion des versions et l'isolation du code étranger.

Jetez un coup d'oeil sur MSDN pour quelques exemples.

+0

Spence, Ce serait génial si j'avais le contrôle du programme de base, mais je ne le fais pas dans ce cas. Je fais quelque chose de "genre" essayant d'aller dans Outlook et d'envoyer un email, mais c'est contre un autre logiciel ... Je n'ai pas accès à la source pour faire des changements. Je dois travailler avec ce que je peux accéder –

0

Je ne sais pas si elle va faire exactement ce que vous voulez, mais Hawkeye vous permettent d'examiner & ajuster les objets .NET lors de l'exécution si elle est une application Windows que vous traitez:

http://www.acorns.com.au/Projects/Hawkeye/

+0

Il ne s'agissait pas de le déboguer, mais de travailler avec les données en mémoire d'une application externe. –

Questions connexes