Overall Progress Bar in MSI
We get hit constantly in usability sessions for not having an indication of overall install progress with our Windows MSI-based installation. All of the tutorials and information I can find online appear to pertain to per-step progress indications, such as updating a progress bar at different points of a specific custom action. I'm having trouble locating information about displaying progress of the overall MSI.
As a first attempt, I used the following logic. I used SQL queries to find a list of all entries in the InstallExecuteSequence table. I organized the list by sequence number. Then, for every MSI message of type INSTALLMESSAGE_ACTIONSTART, I capture the name of the action that is starting. I then look up the position in my sorted list. That becomes the position of my global progress bar. I realize this is a linear approach that doesn't take into account the different lengths of particular steps, but it's a start and it's much better than what we have today.
The trouble with this method is that the MSI jumps around a bit. It doesn't follow the sequence as I would hope. Immediate-mode actions to deferred-mode actions to commit-mode and then back to immediate-mode. I can't rely on the Sequence column of the InstallExecuteSequence table by itself, it's a bit more involved than that.
Does anyone know if a running MSI advertises/broadcasts its current progress position? My understanding of MSI is that very early on, an internal script is created with the sequence of steps that will be run. Do I have any way of tapping into that? A global progress bar is so much more beneficial to users than a per-step progress bar - I have trouble believing that there is no built-in hook for reporting this.
Any information would be appreciated.
As a first attempt, I used the following logic. I used SQL queries to find a list of all entries in the InstallExecuteSequence table. I organized the list by sequence number. Then, for every MSI message of type INSTALLMESSAGE_ACTIONSTART, I capture the name of the action that is starting. I then look up the position in my sorted list. That becomes the position of my global progress bar. I realize this is a linear approach that doesn't take into account the different lengths of particular steps, but it's a start and it's much better than what we have today.
The trouble with this method is that the MSI jumps around a bit. It doesn't follow the sequence as I would hope. Immediate-mode actions to deferred-mode actions to commit-mode and then back to immediate-mode. I can't rely on the Sequence column of the InstallExecuteSequence table by itself, it's a bit more involved than that.
Does anyone know if a running MSI advertises/broadcasts its current progress position? My understanding of MSI is that very early on, an internal script is created with the sequence of steps that will be run. Do I have any way of tapping into that? A global progress bar is so much more beneficial to users than a per-step progress bar - I have trouble believing that there is no built-in hook for reporting this.
Any information would be appreciated.
0 Comments
[ + ] Show comments
Answers (2)
Please log in to answer
Posted by:
anonymous_msiguy
13 years ago
Thanks, pjgeutjens. Yes, I am already using an external UI handler. That is how I am able to tie the INSTALLMESSAGE_ACTIONSTART messages to an update of my global progress bar.
It just seems like I'd be reinventing the wheel to make this work, and I can't believe that I'm the only one who has attempted to do this.
Thanks,
Dan
It just seems like I'd be reinventing the wheel to make this work, and I can't believe that I'm the only one who has attempted to do this.
Thanks,
Dan
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
so that the conversation will remain readable.