2009-10-30 4 views
2

Nous avons une application .net que nous n'avons pas développée, mais que nous utilisons. Je peux dire en utilisant le réflecteur que cette application a 1) une variable statique dans la forme principale du formulaire qui est une référence à ce formulaire "principal" et 2) a un événement sur lequel je veux être en mesure d'agir.Ajout d'une fonction dans mon application .NET en tant que gestionnaire d'événement dans une autre application .NET

Je sais ce que je ferais si c'était dans mon application (mainForm.DefaultInstance.OnAlarm + = myAlarmHandler;) - est-il possible de le faire même si ce n'est pas dans mon application? Si cela aide, il ne peut y avoir qu'une seule instance de l'application avec laquelle je veux m'interfacer. De plus, si je peux le faire, est-il possible d'appeler d'autres méthodes dans cette application comme si c'était l'application elle-même qui les avait déclenchées (bouton clic sur les méthodes click) et définir le texte des zones de texte winform?

Merci pour votre aide!

Répondre

3

Vous aurez peut-être besoin de regarder PostSharp, car cela pourrait vous aider à effectuer cette modification en introduisant un nouvel aspect lors de l'exécution.

http://www.postsharp.org/aop-net/runtime-weaving

La partie intéressante est que pendant que vous expérimentez vous ne changez pas le programme sur le disque, comme tous les changements se produisent lorsque l'ensemble est chargé.

Un problème est que vous allez probablement violer votre contrat de licence, dans la mesure où toute modification de leur programme est interdite, vous pouvez donc vouloir en parler avec les avocats de votre entreprise. Si vous pouvez injecter un aspect dans le programme, il devra appeler votre programme, peut-être en tant qu'appel de service Web, pour transmettre l'information, à moins que vous ne vouliez que démarrer votre programme lorsque l'événement se produira, en passant dans certains paramètres. Je n'ai pas essayé cela, car j'ai tendance à ne pas aimer le tissage en cours d'exécution, et j'attends PostSharp 2.0 avant de faire beaucoup plus d'expériences avec cet outil, bien que j'aie beaucoup utilisé AspectJ sur Java.

+0

C'est fascinant. –

+0

J'ai eu un échange intéressant, dans une autre question ici, avec l'auteur de PostSharp, et j'attends avec impatience la version 2.0, car cela peut me conduire à utiliser AOP en C#. –

1
  • Impossible de trouver un moyen facile de le faire. Cependant si j'essayais alors j'ajouterais une référence à cette application du mien et utiliserais alors un publisher policy qui redirige cette application à mon autre application quand elle est exécutée. Ensuite, vous déléguez à la première application, mais à partir de votre exe.

  • Une autre idée est de ILMERGE les deux exes (ou la vôtre et un ensemble d'enfant de l'autre application) et d'écrire votre propre module loader IL pour exécuter votre code pour vous ajouter point d'extension dans.

Chaque fois que vous pouvez exécuter dans le même espace que l'autre code, vous avez probablement le droit de faire quoi que ce soit. Toutefois, si l'application est nommée chaîne, vous aurez probablement une tonne d'autres problèmes à traiter.

0

Vous pouvez écrire un profileur pour cette application qui s'est assis à l'extérieur et a envoyé une notification lorsqu'une méthode particulière a été appelée.

Voici un très bon article sur la façon de procéder.Je pense que la « Réception Méthode d'entrée et de sortie Notifications » est probablement la partie de l'article que vous voulez:
http://msdn.microsoft.com/en-us/magazine/cc301725.aspx

Si vous n'êtes pas à l'aise avec un peu de C++, il y a une question connexe sur le SO qui traite en utilisant la API de profilage avec un gestionnaire géré:
.Net Profiling API approaches

0

Il me semble que vous voulez faire de l'injection de code dans l'autre application. Vous pouvez utiliser du code non géré (ou une quantité importante de p/invoke) pour injecter du code dans l'autre application avec WriteProcessMemory. Vous pouvez obtenir un bon exemple en regardant la source Snoop.

Questions connexes