我有一个父进程,它将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”。
答案 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()方法可能抛出的异常。