Для устранения этих типов проблем, как правило, необходимо вызвать установщик из командной строки и включить ведение журнала:
msiexec.exe /i TheInstaller.msi /log C:\SomeFolder\InstallLog.log
Если вы заглянете в файл журнала, то сможете увидеть конкретную фазу установки, которую он задерживает, а затем сузить проблему оттуда.
Раньше у меня была проблема, когда установщик одного из продуктов, над которым я работал, несколько минут зависал на одном из последних этапов. Оказалось, что у меня было несколько больших файлов аварийного дампа в моих папках .NET GAC (из-за ошибки в этом конкретном продукте), и установщик Windows, похоже, не понравился. После того как я удалил эти файлы, проблема исчезла.