private Process RunInstaller(InstallInteractivityLevel interactivity, PackageManifest packageManifest, IInstaller whisperer) { _hub.Publish(new ExecutingInstallerEvent(packageManifest)); var installArgs = _argFactory.GetInstallerArguments(interactivity, packageManifest, whisperer); var process = _processController.Start(whisperer.GetProcessPath(), installArgs.Arguments); _logger.Info("Waiting for installation to complete ..."); _processController.WaitForExit(process); if (process.ExitCode != 0) { whisperer.ExitCodes.TryGetValue(process.ExitCode, out var exitReason); throw new InstallerException(process.ExitCode, packageManifest, exitReason, installArgs.LogFile); } return(process); }