I have found that, if I have a Component with a file at ARPINSTALLLOCATION, then msiexec actually sets INSTALLDIR to that value. So, I always includes a file, typically the license file, at that base location, so I have INSTALLDIR automagically set, since I sometimes need it for uninstall or reinstall processes.