Hi,
Could you provide some insight about problem I'm experiencing with InstallShield 2013 Premier and its Suite project.
I have 2 pure InstallScript installers:
a) Core alike installer, aprox 400 MB, needs restart after complete installation, should be installed first; IMPORTANT: this installer is already released and published and CAN'T be changed.
b) Patch alike installer, which adds some functionality to Core one, should be installed after Core.
We have need to install both products as one installer so we've chosen Suite to acomplish this. Our Suite structure looks like this:
OurSuite:
|__OurCore, pure InstallScript; installs many files and drivers; restarts after complete installation
|__OurPatch; pure InstallScript; installs some new files; patches old ones
In OurCore some last steps of installation are:
[1] in AfterMoveData OnFirstUIAfter event we have this steps:
1.1. register RSA keys
1.2. register some INF files
1.3. create desktop shortcuts
1.4. add new windows user group
1.5. set new permision for current user
1.6. ask user if he wants to reboot using code
SdFinishReboot("", szMsg1, SYS_BOOTMACHINE,"",0);
[2] in AfterMoveData onEnd event we have this steps:
2.1 refresh icons
2.2 clear RunOnce entries for prerequisites - this is precaution step because after prerequisites are installed there is additional reboot just in case
2.3 set BATCH_INSTALL = FALSE; since all files were manually veryfied that arent locked etc.
After adding OurCore to OurSuite as first package we set it option in "Install" operation in Reboot request to "Always reboot the machine"; parcel exe is configured with /clone_wait.
When we ran the installer, steps up to mentioned 1.5 executes correctly. When 1.6 command executes and user sees "Reboot machine" question there pops up Error message box that there can't be 2 running installers.
We checked with Spy++/WinSpy that this window is parent of second execution of OurSuite.exe.
Here is last part of our /debuglog for OurSuite:
Code:
-17-2014[02:18:03]: No Windows features associated with parcel '{403B78CB-0F5A-438C-AD98-ECAAB910BE9A}'
1-17-2014[02:18:03]: No Windows features associated with parcel '{7D3B1C18-4147-4B6E-B5C0-5EFC79D936CE}'
1-17-2014[02:18:03]: Engine: starting parcel operations
1-17-2014[02:18:03]: Engine: property 'ISInstallStatus' value now 'IDS_SUITE_PREPARING_FOR_OPERATION'
1-17-2014[02:18:03]: Engine: property 'ISParcelStatus' value now ''
1-17-2014[02:18:03]: Transaction: parcels installing: yes, need elevation: no, any 64-bit: no
1-17-2014[02:18:03]: Running with current process transaction, starting transaction (if supported)
1-17-2014[02:18:03]: Running transaction parcels
1-17-2014[02:18:03]: Running parcel operation for parcel {403B78CB-0F5A-438C-AD98-ECAAB910BE9A}
1-17-2014[02:18:03]: Running EXE parcel operation
1-17-2014[02:18:03]: Engine: property 'ISInstallStatus' value now 'Installing package '
1-17-2014[02:18:03]: Engine: property 'ISParcelStatus' value now 'ID_STRING1'
1-17-2014[02:18:03]: Will launch exe: C:\Users\user\AppData\Local\Downloaded Installations\{0D769768-E507-433F-8EBF-39B6027DA9E0}\OurCore.exe
1-17-2014[02:18:03]: EXE parcel command line:
1-17-2014[02:18:03]: EXE parcel resolved command line:
1-17-2014[02:43:35]: InstallShield setup engine (Unicode) started, cmdline: /debuglog"C:\ProgramData\suite_SimpleRestartingSuite_log_first.log"
1-17-2014[02:43:35]: Engine: we're running from C:\Users\user\Desktop\OurSuite.exe
1-17-2014[02:43:35]: Engine: running with elevated privileges: yes
1-17-2014[02:43:35]: Initializing engine...
1-17-2014[02:43:35]: Engine: parsing setup.xml
1-17-2014[02:43:35]: Bootstrap engine exception: 80040711
1-17-2014[02:43:37]: Original exit status: 0x80040711, final exit status: 0x80040711
1-17-2014[02:43:37]: State manager: removing staging files from: C:\Users\user\AppData\Local\Temp\{BBE8B441-088F-4C11-A172-435C577C467E}\
1-17-2014[02:44:01]: Launch EXE result: 0
1-17-2014[02:44:01]: Final result status for EXE parcel: 80070004
1-17-2014[02:44:01]: Engine: property 'ISInstallStatus' value now 'Package operation complete'
1-17-2014[02:44:01]: Engine: property 'ISParcelStatus' value now 'ID_STRING1'
Questions:
- Do you have any idea what might be wrong?
- Do we need to store or pass somewhere result of SdFinishReboot function? We dont have usage for this value but is it nessesary to pass it somewhere or return?
- How InstallShield Suite determines that its parcel installation has finished? Only by parcel detection condition? By parcel return code? How come in my debuglog there are no parcel return code detected and logged?
- Is there possibility that parcel could be waiting in some custom window in AfterMoveData onEnd event, but InstallShield Suite tries to run some exe's for second parcel?
- How InstallShield Suite implements restarting and continue to installation? By adding RunOnce registry entries to itself exe file?
Whats even strange, that when we create sample project with stucture:
SampleSuite:
|__SampleCore, pure InstallScript; installs 1 file; restarts after complete installation with same restarting code as above
|__SamplePatch; pure InstallScript; installs 1 file
and there weren't none error message boxed and second SampleSuite.exe child were run only after first one ended.