Μην απορρίπτεις τη ShellExecuteEx τόσο γρήγορα (αυτή υποθέτω ότι θες να χρησιμοποιήσεις?). Το structure που γεμίζει περιέχει ένα πεδίο, το hProcess, που περιέχει το handle στο process που δημιουργήθηκε. Το ωραίο τώρα είναι ότι όταν κλείνει το process, το handle γίνεται signalled!
Αν έγραφες σε unmanaged C++ θα μπορούσες να κάνεις ένα WaitForSinbleObject επάνω του από ένα δεύτερο thread. Το δεύτερο thread θα μπλοκάρει μέχρι να τερματίσει το process. Στο .NET, μπορείς να περάσεις το handle στην κλάση ManualResetEvent και να καλέσεις WaitOne, πάλι μέσα από ένα διαφορετικο thread. Βέβαια, αν η δεύτερη εφαρμογή τρέχει για μικρό χρονικό διάστημα, μπορείς και να κάνεις τις κλήσεις μέσα από ένα ασύγχρονο delegate. Αν όμως περιμένεις ότι θα αργήσει, καλύτερα να δημιουργήσεις ένα ανεξάρτητο thread.
Συγγνώμη που δεν έχω και source αλλά μόλις τώρα σκέφτηκα τη λύση και δεν πρόλαβα να τη δοκιμάσω ακόμα!
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos