/// <summary> /// Installs standalone update. /// </summary> /// <param name="UpdateURL">Full download URL.</param> /// <returns>Result of operation.</returns> private bool InstallBinaryUpdate(string UpdateURL) { // Setting default value for result... bool Result = false; // Generating full paths to files... string UpdateFileName = UpdateManager.GenerateUpdateFileName(Path.Combine(AppUpdateDir, Path.GetFileName(UpdateURL))); // Downloading update from server... GuiHelpers.FormShowDownloader(UpMan.AppUpdateURL, UpdateFileName); // Checking if downloaded file exists... if (File.Exists(UpdateFileName)) { // Checking hashes... if (UpMan.CheckAppHash(FileManager.CalculateFileSHA512(UpdateFileName))) { // Setting last update check date... UpdateTimeSetApp(); // Showing message about successful download... MessageBox.Show(AppStrings.UPD_UpdateSuccessful, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Information); // Installing standalone update... try { // Checking if app's installation directory is writable... if (FileManager.IsDirectoryWritable(FullAppPath)) { // Running installer with current access rights... Platform.StartRegularProcess(UpdateFileName); } else { // Running installer with UAC access rights elevation... Platform.StartElevatedProcess(UpdateFileName); } Result = true; } catch (Exception Ex) { MessageBox.Show(AppStrings.UPD_UpdateFailure, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); Logger.Error(Ex, DebugStrings.AppDbgExUpdBinInst); } } else { // Hash missmatch. File was damaged. Removing it... try { File.Delete(UpdateFileName); } catch (Exception Ex) { Logger.Warn(Ex); } // Showing message about hash missmatch... MessageBox.Show(AppStrings.UPD_HashFailure, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { // Showing error about update failure... MessageBox.Show(AppStrings.UPD_UpdateFailure, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } // Returning result... return(Result); }