По идеи, если заменить в вашем коде
Код:
...
WaitForSingleObject(pi.hProcess,INFINITE);
...
на
Код:
...
while (WaitforSingleObject(pi.hProcess, 200) = WAIT_TIMEOUT) do
application.ProcessMessages;
...
то сборка не будет казаться завешанной и будет отвечать на сообщения