.net 3.5进程间通信验证子进程是否正常启动

本文关键字:常启动 启动 是否 进程间通信 验证 子进程 net | 更新日期: 2023-09-27 18:05:01

我有一个父进程使用process.start(..)为另一个进程。
子进程稍后将拥有WCF服务,我在其上调用Initialized()。
在调用任何方法之前,我想验证并确保进程已经正常启动。
现在我的代码是:

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

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

client.Initialize(..);

它正在工作,因为过程是开始好的,但我没有任何迹象表明这一点。

E。如果计算机不允许启动新进程,process . start()将不起作用,我的客户端将尝试.initialize()一个不存在的WCF服务。

我可以使用什么技术来知道这个过程已经开始了?命名管道客户机-服务器?

我不能使用process.WaitForInputIdle(),因为这是Winform应用程序,我从它删除了form1()。"Gui less window application".

.net 3.5进程间通信验证子进程是否正常启动

最后我使用的是EventWaitHandle。
我用它的进程Id命名父进程上的事件,当我创建子进程时,我将父进程Id作为参数发送。
当子进程完成初始化时,它会创建一个新的ManualResetEvent(父进程id来自arg[0])和. 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

可以查看Start()方法的布尔值。此外,你可以将一个Exited事件处理程序关联到进程,告诉你的应用程序已经完成。这样你也可以知道它是否开始和结束后。

编辑:我忘了说,你也可以把你的开始代码在一个尝试块和检查异常,可能是由Start()方法抛出