using System; using System.Diagnostics; using System.IO; using System.Net; using System.Threading; using System.Windows.Forms; namespace Ultron.Update { public partial class UpdateForm : Form { public string ExecuteFile { get; set; } public UpdateForm() { InitializeComponent(); string fileVersion; if (File.Exists("uNgrok.exe")) { try { FileVersionInfo file1 = FileVersionInfo.GetVersionInfo("uNgrok.exe"); fileVersion = string.Format("{0}.{1}.{2}.{3}", file1.FileMajorPart, file1.FileMinorPart, file1.FileBuildPart, file1.FilePrivatePart); string checkUrl = "https://blog.wixy.cn/api/release/Ultron.Ngrok/" + fileVersion; HttpGet(checkUrl); } catch (Exception) { fileVersion = ""; } } else { label1.Visible = false; label2.Visible = true; label2.Text = "未检测到uNgrok"; } } public UpdateForm(string[] args) { string[] startParams = args[0].Split(' '); if(startParams.Length < 2) { MessageBox.Show("启动参数出错"); return; } InitializeComponent(); ExecuteFile = startParams[1]; string updateFile = Directory.GetCurrentDirectory() + @"\"+ ExecuteFile; Thread.Sleep(800); if (File.Exists(updateFile)) File.Delete(updateFile); if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe")) File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe"); if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe")) File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe"); DownLoadFile(startParams[0], startParams[1]); } public void HttpGet(string url) { WebClient wc = new WebClient(); Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); wc.OpenReadAsync(uri); } public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { StreamReader read = new StreamReader(e.Result); string str = read.ReadToEnd(); if (str.Contains("\"code\":1")) { label1.Visible = false; label2.Visible = true; label2.Text = "未检测到新版本"; return; } else { label2.Visible = false; label1.Visible = true; if (MessageBox.Show("检测到新版本,立即更新?", "版本更新", MessageBoxButtons.YesNo) == DialogResult.Yes) { int verStart = str.IndexOf("\"version\":\"") + 11; int verEnd = str.IndexOf("\",\"title\""); string version = str.Substring(verStart, verEnd - verStart); DownLoadFile("https://cloud-disk-1251608065.cos.ap-guangzhou.myqcloud.com/uNgrok_" + version + ".exe", "uNgrok.exe"); } } } private void DownLoadFile(string fileUrl,string fileName) { WebClient wc = new WebClient(); wc.DownloadProgressChanged += wc_DownloadProgressChanged; wc.DownloadFileCompleted += Wc_DownloadFileCompleted; wc.DownloadFileAsync(new Uri(fileUrl), fileName); } private void Wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { label1.Text = "完成"; RunNewApp(); } // int index = 0; void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { try { Action act = () => { progressBar1.Value = e.ProgressPercentage; label1.Text = e.ProgressPercentage + "%"; }; Invoke(act); } catch(Exception ex) { } } public void RunNewApp() { try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "uNgrok.exe"; startInfo.WindowStyle = ProcessWindowStyle.Normal; Process.Start(startInfo); Application.Exit(); } catch (Exception ex) { } } } }