将消息传递给exe C#中的另一个exe

Sam*_*mir 4 c# ipc

我有两个exe运行,c#控制台程序.从一个,我需要告诉第二个exe做某事?怎么样... ?我在看

(Remotable.CommonAssembly)Activator.GetObject(typeof(Remotable.CommonAssembly)

但是从这里我可以调用CommonAssembly(引用的dll)的方法而不是exe的方法.

dev*_*imi 5

对于简单的场景,一个普通的旧窗口事件就足够了 - 一个程序等待发出信号来做某事.

在等待事件的等待程序中生成一个线程.

//Program 1

EventWaitHandle evt = OpenOrCreateEvent("Global\\MyEvent");
evt.WaitOne(); // this thread will block waiting without wasting CPU cycles, 
               // it will be be signaled from the kernel 
               // when the event is set
DoStuff();


//Program 2

EventWaitHandle evt = OpenOrCreateEvent("Global\\MyEvent");
evt.Set();
Run Code Online (Sandbox Code Playgroud)

看一下EventWaitHandle,ManualResetEvent,AutoResetEvent类.

  • 考虑要创建事件的程序 - 您可以尝试从两个程序中打开事件,如果它不存在而不是创建它.
  • 如果其中一个程序是服务(和/或在其他会话/用户中运行),则使用"全局"前缀事件名称.否则它将无法在Vista或更高版本上运行.
  • 创建事件时,您可能需要设置安全属性,以便可以从其他会话中的其他进程打开它.

如果您有更复杂的通信协议以及不同的触发操作,返回值等,那么高级IPC机制(如WCF,Remoting,DCOM,CORBA等)可能会更好.对于简单的情况(一对)窗口事件就足够了.

注意 如果需要在进程间传输数据,请考虑内存映射文件..NET 4.0将提供"官方".NET类,目前可以使用http://github.com/tomasr/filemap/tree/master