I have an Inno Setup install that execute some time consuming 'AfterInstall' action. And while this action is executed, install GUI is completely frozen (seems it's main event loop is not processed). This is not a pleasant end user experience, so maybe it's somehow possible for this operation not to freeze GUI? Like perform it in separate thread or periodically call something like handleGuiEventLoop()
?
For the "action", I'm calling my function from my .dll that makes a number of HTTP requests and writes down response as file into app install folder. This is not CPU intensive, but can take a few seconds. Or, if internet connection is weak / no internet connection available it can take a minute or two. And installer GUI is frozen all this time.
The output progress pages are designed for providing feedback on longer running operations.
But in order for this to be effective you have to be able to keep Inno updated on your current progress by periodically calling methods on this page.
There is a library that will let you pass an Inno script function as a callback to a DLL, which may be of use. You may also want to look at using the ITDownload script from the same site, which lets you do HTTP access from within Inno itself, avoiding the middle-man.
However Inno is inherently single-threaded and GUI-thread-affine, so calling blocking operations directly will always block the UI without special provision. Running code from within a separate thread is possible (but only within a DLL, and you have to be very careful); other options include making asynchronous calls only, or calls which internally maintain GUI updates, such as Exec
.