Files
SzmediTools/Szmedi.RvKits/Common/ReleaseNoteWin.xaml.cs

193 lines
9.3 KiB
C#
Raw Normal View History

2025-09-16 16:06:41 +08:00

using AutoUpdaterDotNET;
using System;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Text;
using System.Windows;
namespace Szmedi.RvKits.Common
{
/// <summary>
/// ReleaseNoteWin.xaml 的交互逻辑
/// </summary>
public partial class ReleaseNoteWin
{
public ReleaseNoteWin()
{
var collection = Properties.Settings.Default.UpdateNotes;
var sb = new StringBuilder();
foreach (var str in collection)
{
//Regex regex = new("^(\\d+.){3}\\d$");
//if (regex.IsMatch(str))
//{
// sb.AppendLine();
//}
sb.AppendLine(str);
}
//DataContext = this;
InitializeComponent();
Title = $"更新日志";
TbReleaseNote.Text = sb.ToString();
TbVersion.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
AutoUpdater.CheckForUpdateEvent += args =>
{
switch (args.Error)
{
case null when args.IsUpdateAvailable:
{
var messageBoxResult = args.Mandatory.Value
? MessageBox.Show(
$@"有新的版本 {args.CurrentVersion} 可用。正在使用的版本:{args.InstalledVersion} 必须进行更新。",
@"SZMEDI工具 更新",
MessageBoxButton.OK,
MessageBoxImage.Information
)
: MessageBox.Show(
$@"有新的版本 {args.CurrentVersion} 可用。你正在使用的版本:{args.InstalledVersion}。是否想要退出Revit进行更新程序",
@"SZMEDI工具 更新",
MessageBoxButton.YesNo,
MessageBoxImage.Question
);
if (messageBoxResult.Equals(MessageBoxResult.OK) || messageBoxResult.Equals(MessageBoxResult.Yes))
{
try
{
if (AutoUpdater.DownloadUpdate(args))
{
Process.GetCurrentProcess().Kill();
//Application.Current.Shutdown();
}
}
catch (Exception exception)
{
MessageBox.Show(
exception.Message,
exception.GetType().ToString(),
MessageBoxButton.OK,
MessageBoxImage.Error
);
}
}
break;
}
case null:
MessageBox.Show(@"无更新可用,请稍后再试", @"无更新可用",
MessageBoxButton.OK, MessageBoxImage.Information);
break;
case WebException:
MessageBox.Show(@"更新服务器出现问题。请检查网络连接,稍后再试。", @"更新检查失败", MessageBoxButton.OK, MessageBoxImage.Error);
break;
default:
//MessageBox.Show(args.Error.Message,
// args.Error.GetType().ToString(), MessageBoxButton.OK,
// MessageBoxImage.Error);
break;
}
};
}
private void Update_Click(object sender, RoutedEventArgs e)
{
UpdateCheck();
}
private void UpdateCheck()
{
// Uncomment following line to run update process without admin privileges.
AutoUpdater.RunUpdateAsAdmin = false;
// Uncomment following line if you want to open download page instead of downloading update file when user click on download button.
// AutoUpdater.OpenDownloadPage = true;
// Uncomment following lines if you don't want user to select remind later time in AutoUpdater notification window.
//AutoUpdater.LetUserSelectRemindLater = false;
//AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Days;
//AutoUpdater.RemindLaterAt = 2;
// Uncomment following line if you don't want to show Skip button.
// AutoUpdater.ShowSkipButton = false;
// Uncomment following line if you don't want to show Remind Later button.
//AutoUpdater.ShowRemindLaterButton = false;
// Uncomment following line to show custom application title in AutoUpdater notification window.
AutoUpdater.AppTitle = "SZMEDI工具 更新";
// Uncomment following line if you want to show errors.
AutoUpdater.ReportErrors = true;
// Uncomment following lines if you want to handle how your application will exit when application finishes downloading the update.
//AutoUpdater.ApplicationExitEvent += () =>
//{
// Title = @"关闭程序中...";
// Thread.Sleep(5000);
// Application.Current.Shutdown();
//};
// Uncomment following lines to handle update logic yourself.
// Uncomment following lines if you want to use XML and update file served only through Proxy.
// var proxy = new WebProxy("local-proxy-IP:8080", true) {Credentials = new NetworkCredential("domain\\user", "password")};
// AutoUpdater.Proxy = proxy;
// Uncomment following lines to periodically check for updates.
// var timer = new DispatcherTimer { Interval = TimeSpan.FromMinutes(2) };
// timer.Tick += delegate { AutoUpdater.Start("http://rbsoft.org/updates/AutoUpdaterTest.xml"); };
// timer.Start();
// Uncomment following lines to provide basic authentication credentials needed to access update resources.
// var basicAuthentication = new BasicAuthentication("myUserName", "myPassword");
// AutoUpdater.BasicAuthXML = AutoUpdater.BasicAuthDownload = AutoUpdater.BasicAuthChangeLog = basicAuthentication;
// Uncomment following lines to enable forced updates.
// AutoUpdater.Mandatory = true;
// AutoUpdater.UpdateMode = Mode.Forced;
// Uncomment following line to change AutoUpdater notification window size.
//AutoUpdater.UpdateFormSize = new System.Drawing.Size(800, 600);
// Uncomment following line if you your XML file can only be accessed through FTP.
AutoUpdater.Start($"{Properties.Settings.Default.FTPServerIP}Updates/AutoUpdater.xml", new NetworkCredential(), Assembly.GetExecutingAssembly());
// Uncomment following lines if you want to persist Remind Later and Skip values in a json file instead of registry.
// string jsonPath = Path.Combine(Environment.CurrentDirectory, "settings.json");
// AutoUpdater.PersistenceProvider = new JsonFilePersistenceProvider(jsonPath);
// Uncomment following lines if you want to change the update zip extraction path. This only works when you use zip file as an update file.
//DirectoryInfo currentDirectory = new(Environment.CurrentDirectory);
//if (currentDirectory.Parent != null)
//{
// AutoUpdater.InstallationPath = currentDirectory.Parent.FullName;
//}
// Uncomment following line if you want to check for update synchronously.
// AutoUpdater.Synchronous = true;
// Uncomment following line if you want to assign installed version manually and don't want to rely on the library to determine the installed version from assembly.
// AutoUpdater.InstalledVersion = new Version("2.0.0.1");
// Uncomment following line if you want to clear application directory before update zip is extracted. This only works when you use zip file as an update file.
// AutoUpdater.ClearAppDirectory = true;
// Uncomment following line if you want to execute different executable after the update. This only works when you use zip file as an update file.
//AutoUpdater.ExecutablePath = "bin/AutoUpdaterTest.exe";
// Uncomment following line to set this window as owner of the all dialogs initiated by AutoUpdater.
AutoUpdater.SetOwner(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);
// Uncomment following line to set TopMost to true for all updater dialogs. It is necessary to do this if TopMost is set to true in your form or window.
AutoUpdater.TopMost = true;
// Uncomment following line to change the Icon shown on the updater dialog.
//AutoUpdater.Icon = Properties.Resources.Icon;
}
}
}