1

I have parent process that use process.start(..) for a another process.
The child process will later on have WCF service that i call an Initialized() on it.
Before calling any methods, I would like to verify and make sure the process has started ok.
right now my code is:

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

and then i use my WCF Service client:

client.Initialize(..);

It is working since process is starting ok, but i dont have any indication for this.

E.g if the computer does not allow to start new process, the Process.Start() wont work, and my client will try to .initialize() an non-existing WCF service.

What technique can i use in order to know the process has started ? Named pipes client-server?

I CANT use process.WaitForInputIdle() since this is Winform application that i removed the form1() from it. "Gui less window application".

4

2 に答える 2

4

最後に使用したのは EventWaitHandle です。
親プロセスのイベントにそのプロセス ID を付けて、子プロセスを作成したときに、親プロセス ID を arg として送信しました。
子プロセスが初期化を完了すると、同じ名前 (arg[0] からの親プロセス ID) で新しい ManualResetEvent を作成し、それを .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 に答える