private void DownloadReleaseCallback(object sender, EventArgs e) { GitHub.RequestState state = sender as GitHub.RequestState; GitHub.DownloadFileCompleted -= DownloadReleaseCallback; GitHub.DownloadProgressChanged -= DownloadProgressCallback; if (ThisDialog != null && ThisDialog.Visible) { DeniedClose = true; try { ThisDialog.Invoke((MethodInvoker) delegate { progress.Hide(); if (!AuthenticodeTools.IsTrusted(tmpFileRelease)) { string msg = "У полученного файла не верная цифровая подпись. Обновление прервано.\n\n" + "Это может означать, что произошла подмена файла или автор забыл подписать файл. " + "Может быть временные проблемы с интернетом. В любом случае, можно попробовать " + "посетить пару мест, где знают о существовании данной программы и спросить там:\n" + "https://homemediaserver.ru/forum\nhttps://hms.lostcut.net\nhttps://github.com/WendyH/HMSEditor/issues"; MessageBox.Show(msg, HMSEditor.MsgCaption, MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } InstallNewFile(); }); } finally { DeniedClose = false; } } }
private void btnUpdate_Click(object sender, EventArgs e) { if (HMSEditor.NeedRestart && AuthenticodeTools.IsTrusted(HMSEditor.NeedCopyNewFile)) { string msg = "При перезапуске программы будет возвращён встроенный редактор.\n" + "После перезапуска, чтобы вернуться к данному альтернативному редактору, " + "достаточно закрыть окно и открыть редактирование скриптов заного. "; MessageBox.Show(msg, HMSEditor.MsgCaption, MessageBoxButtons.OK, MessageBoxIcon.Information); HMSEditor.Exit(); // waiting 3 sek, copy new file to our path and start our executable string rargs = "/C ping 127.0.0.1 -n 3 && Copy /Y \"" + HMSEditor.NeedCopyNewFile + "\" \"" + Application.ExecutablePath + "\" && Del \"" + HMSEditor.NeedCopyNewFile + "\" && \"" + Application.ExecutablePath + "\" " + HMS.StartArgs; ProcessStartInfo Info = new ProcessStartInfo(); Info.Arguments = rargs; Info.WindowStyle = ProcessWindowStyle.Hidden; Info.CreateNoWindow = true; Info.FileName = "cmd.exe"; if (!DirIsWriteable(ExecutableDir)) { msg = "Текущая программа находится в каталоге, где нужны привилегии для записи файлов.\n" + "Будет сделан запрос на ввод имени и пароля пользователя,\n" + "который данными привилегиями обладает."; MessageBox.Show(msg, HMSEditor.MsgCaption, MessageBoxButtons.OK, MessageBoxIcon.Information); Info.Verb = "runas"; } try { Process.Start(Info); } catch (Exception ex) { msg = "Ошибка обновления программы.\n" + "Возможно, из-за нарушения прав доступа или по какой-то другой причине.\n" + "Автоматическое обновление не произошло."; MessageBox.Show(msg, HMSEditor.MsgCaption, MessageBoxButtons.OK, MessageBoxIcon.Stop); HMS.LogError(ex.ToString()); return; } TryDeleteFile(HMS.ErrorLogFile); Application.Exit(); Close(); return; } //progress.Show(); Refresh(); btnUpdateProgram.Text = "Идёт загрузка..."; btnUpdateProgram.Enabled = false; btnUpdateTemplates.Enabled = false; GitHub.DownloadFileCompleted += new EventHandler(DownloadReleaseCallback); GitHub.DownloadProgressChanged += new EventHandler(DownloadProgressCallback); GitHub.DownloadLatestReleaseAsync(tmpFileRelease); }