Listen for events in another application

后端 未结 5 1758
北荒
北荒 2020-11-30 04:43

Suppose I have two applications written in C#. The first is a third party application that raises an event called \"OnEmailSent\".

The second is a custom app that I\

相关标签:
5条回答
  • 2020-11-30 05:23

    You can either use remoting or WCF. See http://msdn.microsoft.com/en-us/library/aa730857(VS.80).aspx#netremotewcf_topic7.

    0 讨论(0)
  • 2020-11-30 05:28

    In order for two applications (separate processes) to exchange events, they must agree on how these events are communicated. There are many different ways of doing this, and exactly which method to use may depend on architecture and context. The general term for this kind of information exchange between processes is Inter-process Communication (IPC). There exists many standard ways of doing IPC, the most common being files, pipes, (network) sockets, remote procedure calls (RPC) and shared memory. On Windows it's also common to use window messages.

    I am not sure how this works for .NET/C# applications on Windows, but in native Win32 applications you can hook on to the message loop of external processes and "spy" on the messages they are sending. If your program generates a message event when the desired function is called, this could be a way to detect it.

    If you are implementing both applications yourself you can chose to use any IPC method you prefer. Network sockets and higher-level socket-based protocols like HTTP, XML-RPC and SOAP are very popular these days, as they allow you do run the applications on different physical machines as well (given that they are connected via a network).

    0 讨论(0)
  • 2020-11-30 05:32

    What's the nature of that OnEmailSent event from that third party application? I mean, how do you know the application is triggering such an event?

    If you are planning on doing interprocess communication, the first question you should ask yourself is: Is it really necessary?

    Without questioning your motives, if you really need to do interprocess communication, you will need some sort of mechanism. The list is long, very long. From simple WM_DATA messages to custom TCP protocols to very complex Web services requiring additional infrastructures.

    This brings the question, what is it you are trying to do exactly? What is this third party application you have no control over?

    Also, the debugger has a very invasive way of debugging processes. Don't expect that to be the standard interprocess mechanism used by all other applications. As a matter of fact, it isn't.

    0 讨论(0)
  • 2020-11-30 05:34

    You can try Managed Spy and for programmatic access ManagedSpyLib

    ManagedSpyLib introduces a class called ControlProxy. A ControlProxy is a representation of a System.Windows.Forms.Control in another process. ControlProxy allows you to get or set properties and subscribe to events as if you were running inside the destination process. Use ManagedSpyLib for automation testing, event logging for compatibility, cross process communication, or whitebox testing.

    But this might not work for you, depends whether ControlProxy can somehow access the event you're after within your third-party application.

    You could also use Reflexil

    Reflexil allows IL modifications by using the powerful Mono.Cecil library written by Jb EVAIN. Reflexil runs as Reflector plug-in and is directed especially towards IL code handling. It accomplishes this by proposing a complete instruction editor and by allowing C#/VB.NET code injection.

    0 讨论(0)
  • 2020-11-30 05:36

    You can implement a similar scenario with SQL Server 2005 query change notifications by maintaing a persistent SqlConnection with a .NET application that blocks until data changes in the database.

    See http://www.code-magazine.com/article.aspx?quickid=0605061.

    0 讨论(0)
提交回复
热议问题