direi che innanzi tutto non avvii direttamente cmd.exe, bensì un software che serve a mandare in stampa, e fa una gran differenza ti assicuro

dopo di che perché non provi ad usare ghostscript? è gratuito, è semplice, ed è fatto per funzionare da linea di comando

basta che imposti il funzionamento in modalità QUIET e BATCH mentre come output gli dici che deve utilizzare il sistema di stampa di windows cosi gli passi quale stampante e l'elenco dei file pdf da mandare in stampa!

Riguardo l'attesa, se usi pe funzioni proc* o p* puoi avviare ghostscript in quel modo e se ti invia un output per singola pagina stampata (eventualmente mettendo ghostscript in modalità verbosa) puoi inviare TUTTO il contenuto della pagina prima di iniziare la stampa, non chiudi il body e per aggiornare la pagina mentre ancora il sistema sta lavorando invii un blocco di codice javascript che va ad aggiornare una barra di progressione o un testo informativo e cosi via!

Ovviamente mentre attendi la stampa ti conviene usare il set_time_limit in modo da evitare il blocco della pagina dopo 30 secondi!

Con questo sistemino semplice semplice puoi avere più controllo sul processo di stampa, puoi aggiornare l'utente sullo stato e soprattutto eviti di incappare in questo problemi!

Per finire ... non avrai più la necessità di dover far funzionare tutto su windows ma potrai anche passare ad usare linux (anche sempre usando ghostscript)

In alternativa, per php su windows esiste un'estensione per controllare le stampanti
http://pecl.php.net/package/printer
http://it.php.net/printer

Ad esempio tramite
http://it.php.net/manual/en/function.printer-list.php

puoi elencare le stampanti collegate al sistema o le stampanti presenti su quel dato client presenti nel sistema (cosi da permette di stampare direttamente sulla stampante del client se questa è installata sul server)

insomma, si ci può giocare un pò