When I use ExecWait, it doesn't wait
From NSIS Wiki
Some installers, including the NSIS uninstaller, extract another executable, execute it and immediately exit. ExecWait waits only for the first installer, but since that installer exits after executing the sub-installer, ExecWait can't wait on the sub-installer. The result is an executed installer which ExecWait doesn't wait for.
To get around this problem, the executed installer must be told to wait for the sub-installer or simply do the work itself. That can usually be done using some command line switches. For example, passing /SMS on the command line of InstallShield installers disables this behavior.
A very extensive list of available command line switches for common installers is available from Unattended.
Within a Windows batch file, to wait for the installer to complete, use the start command with the /wait flag: eg, "start /wait installer.exe"