private void DownloadUpdateDialogLoad(object sender, EventArgs e) { _webClient = new MyWebClient { CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore) }; if (AutoUpdater.Proxy != null) { _webClient.Proxy = AutoUpdater.Proxy; } var uri = new Uri(_downloadURL); if (string.IsNullOrEmpty(AutoUpdater.DownloadPath)) { _tempFile = Path.GetTempFileName(); } else { _tempFile = Path.Combine(AutoUpdater.DownloadPath, $"{Guid.NewGuid().ToString()}.tmp"); if (!Directory.Exists(AutoUpdater.DownloadPath)) { Directory.CreateDirectory(AutoUpdater.DownloadPath); } } if (AutoUpdater.BasicAuthDownload != null) { _webClient.Headers[HttpRequestHeader.Authorization] = AutoUpdater.BasicAuthDownload.ToString(); } _webClient.DownloadProgressChanged += OnDownloadProgressChanged; _webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted; _webClient.DownloadFileAsync(uri, _tempFile); }
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { if (asyncCompletedEventArgs.Cancelled) { return; } if (asyncCompletedEventArgs.Error != null) { MessageBox.Show(asyncCompletedEventArgs.Error.Message, asyncCompletedEventArgs.Error.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; Close(); return; } if (!string.IsNullOrEmpty(AutoUpdater.Checksum)) { if (!CompareChecksum(_tempFile, AutoUpdater.Checksum)) { _webClient = null; Close(); return; } } string fileName; string contentDisposition = _webClient.ResponseHeaders["Content-Disposition"] ?? string.Empty; if (string.IsNullOrEmpty(contentDisposition)) { fileName = Path.GetFileName(_webClient.ResponseUri.LocalPath); } else { fileName = TryToFindFileName(contentDisposition, "filename="); if (string.IsNullOrEmpty(fileName)) { fileName = TryToFindFileName(contentDisposition, "filename*=UTF-8''"); } } var tempPath = Path.Combine(string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, fileName); try { if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); } catch (Exception e) { MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; Close(); return; } var processStartInfo = new ProcessStartInfo { FileName = tempPath, UseShellExecute = true, Arguments = AutoUpdater.InstallerArgs.Replace("%path%", Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)) }; var extension = Path.GetExtension(tempPath); if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) { string installerPath = Path.Combine(Path.GetDirectoryName(tempPath), "ZipExtractor.exe"); File.WriteAllBytes(installerPath, Resources.ZipExtractor); StringBuilder arguments = new StringBuilder($"\"{tempPath}\" \"{Process.GetCurrentProcess().MainModule.FileName}\""); string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) { if (i.Equals(1)) { arguments.Append(" \""); } arguments.Append(args[i]); arguments.Append(i.Equals(args.Length - 1) ? "\"" : " "); } processStartInfo = new ProcessStartInfo { FileName = installerPath, UseShellExecute = true, Arguments = arguments.ToString() }; } else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) { processStartInfo = new ProcessStartInfo { FileName = "msiexec", Arguments = "/i " + tempPath }; } if (AutoUpdater.RunUpdateAsAdmin) { processStartInfo.Verb = "runas"; } try { Process.Start(processStartInfo); } catch (Win32Exception exception) { _webClient = null; if (exception.NativeErrorCode != 1223) { throw; } } Close(); }
private static object CheckUpdate(Assembly mainAssembly) { var companyAttribute = (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); string appCompany = companyAttribute != null ? companyAttribute.Company : ""; if (string.IsNullOrEmpty(AppTitle)) { var titleAttribute = (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; } string registryLocation = !string.IsNullOrEmpty(appCompany) ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" : $@"Software\{AppTitle}\AutoUpdater"; if (PersistenceProvider == null) { PersistenceProvider = new RegistryPersistenceProvider(registryLocation); } BaseUri = new Uri(AppCastURL); UpdateInfoEventArgs args; using (MyWebClient client = GetWebClient(BaseUri, BasicAuthXML)) { string xml = client.DownloadString(BaseUri); if (ParseUpdateInfoEvent == null) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdateInfoEventArgs)); XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xml)) { XmlResolver = null }; args = (UpdateInfoEventArgs)xmlSerializer.Deserialize(xmlTextReader); } else { ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(xml); ParseUpdateInfoEvent(parseArgs); args = parseArgs.UpdateInfo; } } if (string.IsNullOrEmpty(args.CurrentVersion) || string.IsNullOrEmpty(args.DownloadURL)) { throw new MissingFieldException(); } args.InstalledVersion = mainAssembly.GetName().Version; args.IsUpdateAvailable = new Version(args.CurrentVersion) > mainAssembly.GetName().Version; if (!Mandatory) { if (string.IsNullOrEmpty(args.Mandatory.MinimumVersion) || args.InstalledVersion < new Version(args.Mandatory.MinimumVersion)) { Mandatory = args.Mandatory.Value; UpdateMode = args.Mandatory.UpdateMode; } } if (Mandatory) { ShowRemindLaterButton = false; ShowSkipButton = false; } else { // Read the persisted state from the persistence provider. // This method makes the persistence handling independent from the storage method. var skippedVersion = PersistenceProvider.GetSkippedVersion(); if (skippedVersion != null) { var currentVersion = new Version(args.CurrentVersion); if (currentVersion <= skippedVersion) { return(null); } if (currentVersion > skippedVersion) { // Update the persisted state. Its no longer makes sense to have this flag set as we are working on a newer application version. PersistenceProvider.SetSkippedVersion(null); } } var remindLaterAt = PersistenceProvider.GetRemindLater(); if (remindLaterAt != null) { int compareResult = DateTime.Compare(DateTime.Now, remindLaterAt.Value); if (compareResult < 0) { return(remindLaterAt.Value); } } } return(args); }
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { if (asyncCompletedEventArgs.Cancelled) { return; } try { if (asyncCompletedEventArgs.Error != null) { throw asyncCompletedEventArgs.Error; } if (_args.CheckSum != null) { CompareChecksum(_tempFile, _args.CheckSum); } ContentDisposition contentDisposition = null; if (!String.IsNullOrWhiteSpace(_webClient.ResponseHeaders?["Content-Disposition"])) { contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]); } var fileName = string.IsNullOrEmpty(contentDisposition?.FileName) ? Path.GetFileName(_webClient.ResponseUri.LocalPath) : contentDisposition.FileName; var tempPath = Path.Combine( string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, fileName); if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); string installerArgs = null; if (!string.IsNullOrEmpty(_args.InstallerArgs)) { installerArgs = _args.InstallerArgs.Replace("%path%", Path.GetDirectoryName(Process.GetCurrentProcess().MainModule?.FileName)); } var processStartInfo = new ProcessStartInfo { FileName = tempPath, UseShellExecute = true, Arguments = installerArgs ?? string.Empty }; var extension = Path.GetExtension(tempPath); if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) { string installerPath = Path.Combine(Path.GetDirectoryName(tempPath) ?? throw new InvalidOperationException(), "ZipExtractor.exe"); File.WriteAllBytes(installerPath, Resources.ZipExtractor); string executablePath = Process.GetCurrentProcess().MainModule?.FileName; string extractionPath = Path.GetDirectoryName(executablePath); if (!string.IsNullOrEmpty(AutoUpdater.InstallationPath) && Directory.Exists(AutoUpdater.InstallationPath)) { extractionPath = AutoUpdater.InstallationPath; } StringBuilder arguments = new StringBuilder($"\"{tempPath}\" \"{extractionPath}\" \"{executablePath}\""); if (AutoUpdater.ClearAppDirectory) { arguments.Append(" -c"); } string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) { if (i.Equals(1)) { arguments.Append(" \""); } arguments.Append(args[i]); arguments.Append(i.Equals(args.Length - 1) ? "\"" : " "); } processStartInfo = new ProcessStartInfo { FileName = installerPath, UseShellExecute = true, Arguments = arguments.ToString() }; } else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) { processStartInfo = new ProcessStartInfo { FileName = "msiexec", Arguments = $"/i \"{tempPath}\"", }; if (!string.IsNullOrEmpty(installerArgs)) { processStartInfo.Arguments += " " + installerArgs; } } if (AutoUpdater.RunUpdateAsAdmin) { processStartInfo.Verb = "runas"; } try { Process.Start(processStartInfo); } catch (Win32Exception exception) { if (exception.NativeErrorCode == 1223) { _webClient = null; } else { throw; } } } catch (Exception e) { MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; } finally { DialogResult = _webClient == null ? DialogResult.Cancel : DialogResult.OK; FormClosing -= DownloadUpdateDialog_FormClosing; Close(); } }
//public void DownloadFile() //{ // _webClient.DownloadFile(uri, _tempFile); // _webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted; //} private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { string tempPath = ""; if (asyncCompletedEventArgs.Cancelled) { return; } try { if (asyncCompletedEventArgs.Error != null) { throw asyncCompletedEventArgs.Error; } if (_args.CheckSum != null) { CompareChecksum(_tempFile, _args.CheckSum); } ContentDisposition contentDisposition = null; if (_webClient.ResponseHeaders["Content-Disposition"] != null) { contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]); } var fileName = string.IsNullOrEmpty(contentDisposition?.FileName) ? Path.GetFileName(_webClient.ResponseUri.LocalPath) : contentDisposition.FileName; tempPath = Path.Combine( string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, fileName); if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); //string installerArgs = null; //if (!string.IsNullOrEmpty(_args.InstallerArgs)) //{ // installerArgs = _args.InstallerArgs.Replace("%path%", // Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); //} //var processStartInfo = new ProcessStartInfo //{ // FileName = tempPath, // UseShellExecute = true, // Arguments = installerArgs //}; //var extension = Path.GetExtension(tempPath); //if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) //{ // string installerPath = Path.Combine(Path.GetDirectoryName(tempPath), "ZipExtractor.exe"); // File.WriteAllBytes(installerPath, Resources.ZipExtractor); // string executablePath = Process.GetCurrentProcess().MainModule.FileName; // string extractionPath = Path.GetDirectoryName(executablePath); // if (!string.IsNullOrEmpty(AutoUpdater.InstallationPath) && // Directory.Exists(AutoUpdater.InstallationPath)) // { // extractionPath = AutoUpdater.InstallationPath; // } // StringBuilder arguments = // new StringBuilder($"\"{tempPath}\" \"{extractionPath}\" \"{executablePath}\""); // string[] args = Environment.GetCommandLineArgs(); // for (int i = 1; i < args.Length; i++) // { // if (i.Equals(1)) // { // arguments.Append(" \""); // } // arguments.Append(args[i]); // arguments.Append(i.Equals(args.Length - 1) ? "\"" : " "); // } // processStartInfo = new ProcessStartInfo // { // FileName = installerPath, // UseShellExecute = true, // Arguments = arguments.ToString() // }; //} //else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) //{ // processStartInfo = new ProcessStartInfo // { // FileName = "msiexec", // Arguments = $"/i \"{tempPath}\"" // }; // if (!string.IsNullOrEmpty(installerArgs)) // { // processStartInfo.Arguments += " " + installerArgs; // } //} //if (AutoUpdater.RunUpdateAsAdmin) //{ // processStartInfo.Verb = "runas"; //} //try //{ // Process.Start(processStartInfo); //} //catch (Win32Exception exception) //{ // if (exception.NativeErrorCode == 1223) // { // _webClient = null; // } // else // { // throw; // } //} } catch (Exception e) { MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; } finally { if (_OnDownloadFileCompleted != null) { _OnDownloadFileCompleted(tempPath, sender, asyncCompletedEventArgs, _webClient != null); } } }
/// <inheritdoc /> public void Apply(ref MyWebClient webClient) { webClient.Credentials = new NetworkCredential(Username, Password); }
private static void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { Assembly mainAssembly = e.Argument as Assembly; var companyAttribute = (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); string appCompany = companyAttribute != null ? companyAttribute.Company : ""; if (string.IsNullOrEmpty(AppTitle)) { var titleAttribute = (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; } RegistryLocation = !string.IsNullOrEmpty(appCompany) ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" : $@"Software\{AppTitle}\AutoUpdater"; BaseUri = new Uri(AppCastURL); UpdateInfoEventArgs args; using (MyWebClient client = GetWebClient(BaseUri, BasicAuthXML)) { string xml = client.DownloadString(BaseUri); if (ParseUpdateInfoEvent == null) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdateInfoEventArgs)); XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xml)) { XmlResolver = null }; args = (UpdateInfoEventArgs)xmlSerializer.Deserialize(xmlTextReader); } else { ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(xml); ParseUpdateInfoEvent(parseArgs); args = parseArgs.UpdateInfo; } } if (!Mandatory) { Mandatory = args.Mandatory; UpdateMode = args.UpdateMode; } if (string.IsNullOrEmpty(args.CurrentVersion) || string.IsNullOrEmpty(args.DownloadURL)) { throw new InvalidDataException(); } if (Mandatory) { ShowRemindLaterButton = false; ShowSkipButton = false; } else { using (RegistryKey updateKey = Registry.CurrentUser.OpenSubKey(RegistryLocation)) { if (updateKey != null) { object skip = updateKey.GetValue("skip"); object applicationVersion = updateKey.GetValue("version"); if (skip != null && applicationVersion != null) { Version currentVersion = new Version(args.CurrentVersion); string skipValue = skip.ToString(); var skipVersion = new Version(applicationVersion.ToString()); if (skipValue.Equals("1") && currentVersion <= skipVersion) { return; } if (currentVersion > skipVersion) { using (RegistryKey updateKeyWrite = Registry.CurrentUser.CreateSubKey(RegistryLocation)) { if (updateKeyWrite != null) { updateKeyWrite.SetValue("version", currentVersion.ToString()); updateKeyWrite.SetValue("skip", 0); } } } } object remindLaterTime = updateKey.GetValue("remindlater"); if (remindLaterTime != null) { DateTime remindLater = Convert.ToDateTime(remindLaterTime.ToString(), CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat); int compareResult = DateTime.Compare(DateTime.Now, remindLater); if (compareResult < 0) { e.Result = remindLater; return; } } } } } args.InstalledVersion = mainAssembly.GetName().Version; args.IsUpdateAvailable = new Version(args.CurrentVersion) > mainAssembly.GetName().Version; e.Result = args; }
/// <inheritdoc /> public void Apply(ref MyWebClient webClient) { webClient.Headers[HttpRequestHeader.Authorization] = ToString(); }
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { if (asyncCompletedEventArgs.Cancelled) { return; } try { if (asyncCompletedEventArgs.Error != null) { throw asyncCompletedEventArgs.Error; } if (_args.CheckSum != null) { CompareChecksum(_tempFile, _args.CheckSum); } ContentDisposition contentDisposition = null; if (_webClient.ResponseHeaders["Content-Disposition"] != null) { contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]); } var fileName = string.IsNullOrEmpty(contentDisposition?.FileName) ? Path.GetFileName(_webClient.ResponseUri.LocalPath) : contentDisposition.FileName; var tempPath = Path.Combine( string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, fileName); if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); string installerArgs = null; if (!string.IsNullOrEmpty(_args.InstallerArgs)) { installerArgs = _args.InstallerArgs.Replace("%path%", Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); } //TODO: //写程序版本 string executablePathFile = Process.GetCurrentProcess().MainModule.FileName; string appPath = System.IO.Directory.GetParent(Path.GetDirectoryName(executablePathFile)).FullName; string configPath = appPath + "//version.json"; string verString = File.ReadAllText(configPath); JObject jobject = JObject.Parse(verString); jobject["version"] = this._args.CurrentVersion.ToString(); File.WriteAllText(configPath, jobject.ToString()); string extractionRunPath = appPath + "//" + this._args.CurrentVersion.ToString() + "//" + Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); var processStartInfo = new ProcessStartInfo { FileName = tempPath, UseShellExecute = true, Arguments = installerArgs }; var extension = Path.GetExtension(tempPath); if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) { string installerPath = Path.Combine(Path.GetDirectoryName(tempPath), "ZipExtractor.exe"); File.WriteAllBytes(installerPath, Resources.ZipExtractor); //string executablePath = Process.GetCurrentProcess().MainModule.FileName; //string extractionPath = Path.GetDirectoryName(executablePathFile); string extractionPath = Directory.GetParent(Path.GetDirectoryName(executablePathFile)).FullName; if (!string.IsNullOrEmpty(AutoUpdater.InstallationPath) && Directory.Exists(AutoUpdater.InstallationPath)) { extractionPath = AutoUpdater.InstallationPath; } StringBuilder arguments = new StringBuilder($"\"{tempPath}\" \"{extractionPath}\" \"{extractionRunPath}\""); string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) { if (i.Equals(1)) { arguments.Append(" \""); } arguments.Append(args[i]); arguments.Append(i.Equals(args.Length - 1) ? "\"" : " "); } processStartInfo = new ProcessStartInfo { FileName = installerPath, UseShellExecute = true, Arguments = arguments.ToString() }; } else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) { processStartInfo = new ProcessStartInfo { FileName = "msiexec", Arguments = $"/i \"{tempPath}\"" }; if (!string.IsNullOrEmpty(installerArgs)) { processStartInfo.Arguments += " " + installerArgs; } } if (AutoUpdater.RunUpdateAsAdmin) { processStartInfo.Verb = "runas"; } try { Process.Start(processStartInfo); } catch (Win32Exception exception) { if (exception.NativeErrorCode == 1223) { _webClient = null; } else { throw; } } } catch (Exception e) { MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; } finally { Close(); } }
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { if (asyncCompletedEventArgs.Cancelled) { return; } if (asyncCompletedEventArgs.Error != null) { MessageBox.Show(asyncCompletedEventArgs.Error.Message, asyncCompletedEventArgs.Error.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; Close(); return; } if (!string.IsNullOrEmpty(AutoUpdater.Checksum)) { if (!CompareChecksum(_tempFile, AutoUpdater.Checksum)) { _webClient = null; Close(); return; } } string fileName; string contentDisposition = _webClient.ResponseHeaders["Content-Disposition"] ?? string.Empty; if (string.IsNullOrEmpty(contentDisposition)) { fileName = Path.GetFileName(_webClient.ResponseUri.LocalPath); } else { fileName = TryToFindFileName(contentDisposition, "filename="); if (string.IsNullOrEmpty(fileName)) { fileName = TryToFindFileName(contentDisposition, "filename*=UTF-8''"); } } var tempPath = Path.Combine(string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, fileName); try { if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); } catch (Exception ex) { //MessageBox.Show(ex.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); Logger.Log("ERROR", ex.Message); _webClient = null; Close(); return; } var processStartInfo = new ProcessStartInfo { FileName = tempPath, UseShellExecute = true, Arguments = AutoUpdater.InstallerArgs.Replace("%path%", Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)) }; var extension = Path.GetExtension(tempPath); if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) { ZipExtractor.FormMain formZipExtractor = new ZipExtractor.FormMain(tempPath, Constants.MainExePath); formZipExtractor.ShowDialog(); processStartInfo = null; } else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) { processStartInfo = new ProcessStartInfo { FileName = "msiexec", Arguments = $"/i \"{tempPath}\"" }; } if (null != processStartInfo) { if (AutoUpdater.RunUpdateAsAdmin) { processStartInfo.Verb = "runas"; } try { Process process = new Process(); process.StartInfo = processStartInfo; process.Start(); process.WaitForExit(); } catch (Win32Exception exception) { _webClient = null; if (exception.NativeErrorCode != 1223) { throw; } } } Close(); }
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { progressBar.Cursor = Cursors.Default; sw.Stop(); if (asyncCompletedEventArgs.Cancelled) { return; } try { if (asyncCompletedEventArgs.Error != null) { throw asyncCompletedEventArgs.Error; } ContentDisposition contentDisposition = null; if (_webClient.ResponseHeaders["Content-Disposition"] != null) { contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]); } var fileName = string.IsNullOrEmpty(contentDisposition?.FileName) ? Path.GetFileName(_webClient.ResponseUri.LocalPath) : contentDisposition.FileName; var tempPath = Path.Combine(exePath + AutoUpdater.DownloadPath, fileName); if (File.Exists(tempPath)) { File.Delete(tempPath); } File.Move(_tempFile, tempPath); string installerArgs = null; if (!string.IsNullOrEmpty(_args.InstallerArgs)) { installerArgs = _args.InstallerArgs.Replace("%path%", Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); } var processStartInfo = new ProcessStartInfo { FileName = tempPath, UseShellExecute = true, Arguments = installerArgs }; var extension = Path.GetExtension(tempPath); if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) { processStartInfo = new ProcessStartInfo { FileName = "msiexec", Arguments = $"/i \"{tempPath}\"" }; if (!string.IsNullOrEmpty(installerArgs)) { processStartInfo.Arguments += " " + installerArgs; } } if (AutoUpdater.RunUpdateAsAdmin) { processStartInfo.Verb = "runas"; } try { Process.Start(processStartInfo); } catch (Win32Exception exception) { if (exception.NativeErrorCode == 1223) { _webClient = null; } else { throw; } } } catch (Exception ex) { Logs.DebugErrorLogs(ex); MessageBox.Show(ex.ToString(), @"Moto_Boot_Logo_Maker: " + Logs.GetClassName(ex) + " " + Logs.GetLineNumber(ex), MessageBoxButtons.OK, MessageBoxIcon.Error); _webClient = null; } finally { DialogResult = _webClient == null ? DialogResult.Cancel : DialogResult.OK; FormClosing -= UpdateForm_FormClosing; Close(); } }