C#.net 3.5进程间通信验证子进程已启动ok

时间:2013-03-20 16:24:13

标签: c# process

我有一个父进程,它将process.start(..)用于另一个进程 子进程稍后会有WCF服务,我称之为Initialized() 在调用任何方法之前,我想验证并确保该过程已经开始正常 现在我的代码是:

Process driverProcess = new Process();
driverProcess.StartInfo.FileName = ".."
driverProcess.Start();

然后我使用我的WCF服务客户端:

client.Initialize(..);

它正在工作,因为过程开始正常,但我没有任何迹象。

例如,如果计算机不允许启动新进程,则Process.Start()将不起作用,并且我的客户端将尝试.initialize()不存在的WCF服务。

我可以使用哪种技术来了解该过程已经开始?命名管道客户端 - 服务器?

我无法使用process.WaitForInputIdle(),因为这是我从中删除了form1()的Winform应用程序。 “Gui less window application”。

2 个答案:

答案 0 :(得分:4)

我最终使用的是EventWaitHandle 我使用其进程ID在Parent进程上命名了该事件,当我创建子进程时,我将arg作为父进程ID发送。
当子进程完成初始化时,它会创建一个具有相同名称的新ManualResetEvent(来自arg [0]的父进程id)和.Set()它。

父流程代码:

Process newProcess= new Process();  
newProcess.StartInfo.FileName = "YourProcessPath+FileName.exe" //use CombinePath  
newProcess.StartInfo.Arguments = string.Format("{0}", Process.GetCurrentProcess().Id);  
var handle = new EventWaitHandle(false, EventResetMode.AutoReset, Process.GetCurrentProcess().Id.ToString());
handle.Reset();
handle.WaitOne(); //wait until event is Set() from child Process

子进程中的代码:

signalParentProcessImReady = new EventWaitHandle(false, EventResetMode.AutoReset, args[0]);  
DoWwork()... initialize WCF Services for example...
signalParentProcessImReady .Set(); //Signal parent process Im ready

答案 1 :(得分:0)

您可以检查Start()方法的布尔值。此外,您可以将Exited事件处理程序与流程相关联,以告知您的应用程序应用程序已完成。这样你就可以知道它是否在它之后开始和结束。

编辑:我忘了提到你也可以将你的起始代码放在try块中,并检查Start()方法可能抛出的异常。