private void BeginUpgrade(object sender, RoutedEventArgs e) { Button button = (Button)sender; string text = button.Content.ToString(); if (text == Jvedio.Language.Resources.BeginUpgrade) { button.Content = Jvedio.Language.Resources.StopUpgrade; upgrade = new Upgrade(); upgrade.UpgradeCompleted += (s, _) => { UpgradeLoadingCircle.Visibility = Visibility.Hidden; //执行命令 // 我对这个命令有点无语,xcopy直接复制同目录的文件夹竟然不成功,原因是父目录有空格,但是下面这个命令里没有涉及到父目录啊?! // xcopy /y/e Temp %cd%&TIMEOUT /T 1&start \"\" \"jvedio.exe\" &exit // 没办法只能修改成绝对路径了,而且如果放在C盘,也不知道是否需要权限 string arg = $"xcopy /y/e \"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Temp")}\" \"{AppDomain.CurrentDomain.BaseDirectory}\"&TIMEOUT /T 1&start \"\" \"jvedio.exe\" &exit"; using (StreamWriter sw = new StreamWriter("upgrade.bat")) { sw.Write(arg); } FileHelper.TryOpenFile("upgrade.bat"); Application.Current.Shutdown(); }; upgrade.onProgressChanged += (s, _) => { ProgressBUpdateEventArgs ev = _ as ProgressBUpdateEventArgs; UpgradeProgressStackPanel.Visibility = Visibility; if (ev.maximum != 0) { UpgradeProgressBar.Value = (int)(ev.value / ev.maximum * 100); } }; button.Style = (System.Windows.Style)App.Current.Resources["ButtonDanger"]; UpgradeProgressBar.Value = 0; UpgradeLoadingCircle.Visibility = Visibility.Visible; upgrade.Start(); UpgradeProgressStackPanel.Visibility = Visibility.Visible; } else { button.Content = Jvedio.Language.Resources.BeginUpgrade; button.Style = (System.Windows.Style)App.Current.Resources["ButtonStyleFill"]; upgrade?.Stop(); UpgradeProgressStackPanel.Visibility = Visibility.Collapsed; UpgradeLoadingCircle.Visibility = Visibility.Collapsed; } }
private void BeginUpgrade(object sender, RoutedEventArgs e) { Button button = (Button)sender; string text = button.Content.ToString(); if (text == Jvedio.Language.Resources.BeginUpgrade) { button.Content = Jvedio.Language.Resources.StopUpgrade; upgrade = new Upgrade(); upgrade.UpgradeCompleted += (s, _) => { UpgradeLoadingCircle.Visibility = Visibility.Hidden; //执行命令 string arg = "xcopy /y/e Temp %cd%&TIMEOUT /T 1&start \"\" \"jvedio.exe\" &exit"; using (StreamWriter sw = new StreamWriter("upgrade.bat")) { sw.Write(arg); } System.Diagnostics.Process.Start("upgrade.bat"); Application.Current.Shutdown(); }; upgrade.onProgressChanged += (s, _) => { ProgressBUpdateEventArgs ev = _ as ProgressBUpdateEventArgs; UpgradeProgressStackPanel.Visibility = Visibility; if (ev.maximum != 0) { UpgradeProgressBar.Value = (int)(ev.value / ev.maximum * 100); } }; button.Style = (Style)App.Current.Resources["ButtonDanger"]; UpgradeProgressBar.Value = 0; UpgradeLoadingCircle.Visibility = Visibility.Visible; upgrade.Start(); UpgradeProgressStackPanel.Visibility = Visibility.Visible; } else { button.Content = Jvedio.Language.Resources.BeginUpgrade; button.Style = (Style)App.Current.Resources["ButtonStyleFill"]; upgrade?.Stop(); UpgradeProgressStackPanel.Visibility = Visibility.Collapsed; UpgradeLoadingCircle.Visibility = Visibility.Collapsed; } }
private async void DownLoadFromGithub() { string temppath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Temp"); //新建临时文件夹 if (!Directory.Exists(temppath)) { Directory.CreateDirectory(temppath); } await GetDownLoadList(); DownLoadProgress = new ProgressBUpdateEventArgs(); DownLoadProgress.maximum = DownLoadList.Count; foreach (var item in DownLoadList) { if (StopUpgrade) { return; } Console.WriteLine(item); string filepath = Path.Combine(temppath, item); if (!File.Exists(filepath)) { HttpResult streamResult = await DownLoadFile(file_url + item); //写入本地 if (streamResult != null) { WriteFile(streamResult.FileByte, filepath); } } DownLoadProgress.value += 1; if (!StopUpgrade) { onProgressChanged?.Invoke(this, DownLoadProgress); } } //复制文件并覆盖 执行 cmd 命令 UpgradeCompleted?.Invoke(this, null); }