Okay, ich hab nun ne Lösung gefunden:
Ich hab das Process.WaitForExit() in einen eigenen Thread ausgelagert. Dann erzeuge ich in dem Thread, in dem ich auch das TrayIcon erzeugt hab, einen ApplicationContext. Nun starte ich eine Nachrichtenschleife mit dem Context als Parameter.
Wenn in dem anderen Thread der Prozess beendet wurde, verstecke ich das TrayIcon wieder und verlasse den Thread der Nachrichtenschleife (mit ApplicationContext.ExitThread()).
Code:
private System.Windows.Forms.ApplicationContext context;
.
.
.
Thread thread = new Thread(new ThreadStart(this.Wait));
thread.Start();
// Create an Application Context. The thread created above will kill
// it when finished waiting...
this.context = new System.Windows.Forms.ApplicationContext();
System.Windows.Forms.Application.Run(this.context);
.
.
.
context.ExitThread();