1

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

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

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

client.Initialize(..);

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

例如,如果计算机不允许启动新进程,Process.Start() 将无法工作,我的客户端将尝试 .initialize() 一个不存在的 WCF 服务。

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

我不能使用 process.WaitForInputIdle()因为这是我从中删除了 form1() 的 Winform 应用程序。“桂少窗口应用”。

4

2 回答 2

4

我最后使用的是EventWaitHandle。
我用它的进程 ID 命名父进程上的事件,当我创建子进程时,我将父进程 ID 作为 arg 发送。
当子进程完成其初始化时,它会创建一个新的具有相同名称的 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
于 2013-04-20T08:42:07.920 回答
0

您可以检查 Start() 方法的布尔值。此外,您可以将 Exited 事件处理程序与进程相关联,以告诉您的应用程序该应用程序已完成。通过这种方式,您还可以知道它是否立即开始和结束。

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

于 2013-03-20T16:27:25.100 回答