We have customers who want to deploy our client through ADS, so we are going to rewrite it from an InstallScript MSI to a Basic MSI as a major upgrade.
The dilemna comes in with uninstalling the previous, InstallScript MSI versions. I wrote a CA to execute a C++ dll that runs right before ExecuteAction in the UI Sequence. The .dll uses CreateProcess() to run idriver.exe with the appropriate .iss file (from support files) to uninstall previous versions, then it ends and the MSI continues to the Execute Sequence to install the new version.
Because ADS runs installs silently, though, the uninstall gets skipped if you deploy the package through ADS. My boss wants me to do the following:
1. At the beginning of the ExecuteSequence, check for the previous versions.
2. If detected, start a C++ executable and abort the install.
3. Use the executable to uninstall the previous versions.
4. Have the executable start the MSI back up to run a normal, silent install.
I'm not sure how I would go about ending the MSI gracefully from the Execute Sequence. I also don't know if I can execute a C++ program from the Execute Sequence if the install is running through ADS (i.e., what is the operating system status at the point ADS installs are run?)
Finally, I don't know if I can programatically start an MSI from an executable that was started during the ADS install process (again, what is the status of the operating system at that point?)
If anyone can help me, I would be extremely greatful! Thanks
Edited by KathyMorey, 29 March 2006 - 21:53.