public async Task FullInstall(bool silentInstall, ProgressSource progress) { var partialProgress = new Action<int, int, int>((p, offset, ofTotalProgress) => { progress.Raise(offset + (int)((double)p * (double)ofTotalProgress / 100.0)); }); progress.RaiseCommand("Uninstalling current version..."); UninstallOldInstallerIfFound(); partialProgress(100, 0, 15); progress.RaiseCommand("Installing VC redists..."); InstallRedists(); partialProgress(100, 15, 15); progress.RaiseCommand("Extracting Fuse..."); var updateInfo = await CheckForUpdate(); await DownloadReleases(updateInfo.ReleasesToApply); var applyReleases = new ApplyReleasesImpl(rootAppDirectory); await acquireUpdateLock(); await applyReleases.ApplyReleases(updateInfo, silentInstall, true, (p) => partialProgress(p, 30, 70)); }