如何从另一个.NET进程获取对象的句柄?

时间:2009-10-14 20:26:12

标签: .net wcf named-pipes interprocess

在C#中,我知道如何从代码运行.NET可执行文件,并查明可执行文件的实例是否已在运行。我想要做的是,如果 实例已在运行,请在不同可执行文件的C#代码中获取Foo对象的实例。

我有一个Windows应用程序,(例如Outlook的NET版本)。用户可以正常使用该应用程序,但是在后台运行也是一个监视来自第三方系统的XML文件的过程。

我需要的是观察程序进程启动.NET程序(如果它没有运行)(或获取句柄),然后在新的/中调用对象实例上的方法CreateEmail现有流程。

4 个答案:

答案 0 :(得分:2)

您可以使用.NET Remoting激活已在运行的应用程序中的对象。

查看以下示例:About .NET Remoting: Three concepts Compared and Simplified

答案 1 :(得分:1)

使用System.Diagnostics.Process类。

要运行,您可以Process.Start("string path");并列出当前正在运行的流程以执行检查。

答案 2 :(得分:1)

为什么不将FileSystemWatcher添加到主应用程序?那就是后台进程除了监视XML文件之外什么也不做。

如果这不可行,您可以使用NamedPipeServerStreamNamedPipeClientStream从后台进程向主应用程序发送“命令”。当主应用程序收到此命令时,它将运行CreateEmail方法。

答案 3 :(得分:0)

嗯,你可以使用:

Process.GetProcessesByName(<process Name here>);

返回Process []。

查看Process类的静态方法,它们非常直观且有用。