Soganz kann ich da was nicht nachvollziehen, aber:

Das Programm D muss ja wohl irgendwie das Handle der Pipe noch übergeben bekommen, sonst kann ja auf der Empfangsseite nichts ankommen.

Ich vermute daher mal, dass der Close nicht erfolgreich ist, da noch irgendeine Ressource belegt ist.

Wie erfolgt denn der Close ?