v1.1.2: 新增 PatchService 安装/卸载补丁系统 + 品牌更新

This commit is contained in:
雾启工作室
2026-06-28 10:07:06 +08:00
parent a1140d15ab
commit 790f5901cf
8 changed files with 320 additions and 75 deletions

View File

@@ -4,7 +4,6 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
using Microsoft.Win32;
using BetterEN5.Services;
@@ -13,8 +12,8 @@ namespace BetterEN5.UI
public partial class BetterSeewoMainWindow : Window
{
private readonly InkService _inkService = new();
private readonly ConversionService _conversionService = new();
private readonly ActivationService _activationService = new();
private readonly PatchService _patchService = new();
public BetterSeewoMainWindow()
{
@@ -22,36 +21,95 @@ namespace BetterEN5.UI
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
private async void OnLoaded(object sender, RoutedEventArgs e)
{
var sb = (Storyboard)TryFindResource("ScaleInStoryboard");
if (sb != null) BeginStoryboard(sb);
_ = RefreshStatusAsync();
await RefreshInstallStatusAsync();
}
private void NavChanged(object sender, RoutedEventArgs e)
{
if (sender == NavInk) ShowPanel(PanelInk);
if (sender == NavInstall) ShowPanel(PanelInstall);
else if (sender == NavInk) ShowPanel(PanelInk);
else if (sender == NavConvert) ShowPanel(PanelConvert);
else if (sender == NavTouch) ShowPanel(PanelTouch);
else if (sender == NavBoard) ShowPanel(PanelBoard);
else if (sender == NavActivate) ShowPanel(PanelActivate);
}
private void ShowPanel(StackPanel panel)
{
foreach (var p in new[] { PanelInk, PanelConvert, PanelTouch, PanelBoard, PanelActivate })
foreach (var p in new[] { PanelInstall, PanelInk, PanelConvert, PanelTouch, PanelActivate })
p.Visibility = p == panel ? Visibility.Visible : Visibility.Collapsed;
}
private async Task RefreshStatusAsync()
private async Task RefreshInstallStatusAsync()
{
var touchOk = await Task.Run(() => TouchFixService.IsTouchWorkingCorrectly());
TouchStatus.Text = touchOk ? "✅ IWB 模式已启用" : "⚠️ 未启用 IWB 模式";
var info = await Task.Run(() => _activationService.GetCurrentStatus());
ActivationStatusText.Text = info.IsProfessional
? $"✅ 专业版 · {info.LastActivationDate}"
: "🔓 社区版";
var installed = await Task.Run(() => _patchService.IsInstalled());
InstallBtn.IsEnabled = !installed;
UninstallBtn.IsEnabled = installed;
InstallStatusText.Text = installed
? "✅ 补丁已安装"
: "⚠️ 补丁未安装";
if (installed)
{
var m = await Task.Run(() => _patchService.GetManifest());
PatchDetailText.Text = $"版本: {m.Version} | 安装时间: {m.InstallTime} | 备份文件: {m.Backups.Count} 个 | 注册表项: {m.RegistryKeys.Count} 个";
}
else
{
PatchDetailText.Text = "尚未安装补丁。点击「安装补丁」将备份关键配置并应用增强补丁。";
}
}
private async void InstallPatch_Click(object s, RoutedEventArgs e)
{
var progress = new Progress<string>(msg =>
{
Dispatcher.Invoke(() => PatchDetailText.Text = msg);
});
InstallBtn.IsEnabled = false;
UninstallBtn.IsEnabled = false;
InstallStatusText.Text = "⏳ 正在安装...";
try
{
await _patchService.InstallAsync(progress);
InstallStatusText.Text = "✅ 补丁已安装";
UninstallBtn.IsEnabled = true;
}
catch (Exception ex)
{
InstallStatusText.Text = "❌ 安装失败";
PatchDetailText.Text = ex.Message;
InstallBtn.IsEnabled = true;
}
}
private async void UninstallPatch_Click(object s, RoutedEventArgs e)
{
var result = MessageBox.Show(this,
"确定要卸载 Better-Seewo 补丁吗?\n将还原备份文件并清除注册表修改。",
"卸载确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result != MessageBoxResult.Yes) return;
var progress = new Progress<string>(msg =>
{
Dispatcher.Invoke(() => PatchDetailText.Text = msg);
});
InstallBtn.IsEnabled = false;
UninstallBtn.IsEnabled = false;
InstallStatusText.Text = "⏳ 正在卸载...";
try
{
await _patchService.UninstallAsync(progress);
InstallStatusText.Text = "✅ 补丁已卸载";
InstallBtn.IsEnabled = true;
PatchDetailText.Text = "卸载完成。建议重启希沃白板。";
}
catch (Exception ex)
{
InstallStatusText.Text = "❌ 卸载失败";
PatchDetailText.Text = ex.Message;
UninstallBtn.IsEnabled = true;
}
}
private void Minimize_Click(object s, RoutedEventArgs e) => WindowState = WindowState.Minimized;
@@ -95,7 +153,7 @@ namespace BetterEN5.UI
await ProgressDialog.Show(this, "转换文件", async p =>
{
p.UpdateStatus("正在转换 PPT → ENBX...", "调用转换器");
var result = await _conversionService.ConvertPptxToEnbxAsync(dialog.FileName);
var result = await new ConversionService().ConvertPptxToEnbxAsync(dialog.FileName);
p.UpdateStatus("转换完成", Path.GetFileName(result));
});
}
@@ -109,7 +167,7 @@ namespace BetterEN5.UI
await ProgressDialog.Show(this, "转换文件", async p =>
{
p.UpdateStatus("正在转换 ENBX → PPT...", "调用转换器");
var result = await _conversionService.ConvertEnbxToPptxAsync(dialog.FileName);
var result = await new ConversionService().ConvertEnbxToPptxAsync(dialog.FileName);
p.UpdateStatus("导出完成", Path.GetFileName(result));
});
}
@@ -134,30 +192,6 @@ namespace BetterEN5.UI
TouchStatus.Text = "修复已应用,请重启";
}
private async void EnableBoardSupport_Click(object s, RoutedEventArgs e)
{
await ProgressDialog.Show(this, "大屏支持", async p =>
{
p.UpdateStatus("正在配置大屏模式...", "修补 Configs.fkv");
await _activationService.ApplyBoardSupportPatchAsync();
p.UpdateStatus("正在写入注册表...", "大屏相关键值");
await Task.Delay(200);
p.UpdateStatus("完成", "大屏模式已配置");
});
BoardStatus.Text = "大屏模式已配置";
}
private async void EnableIWB_Click(object s, RoutedEventArgs e)
{
await ProgressDialog.Show(this, "IWB 模式", async p =>
{
p.UpdateStatus("正在启用 IWB 模式...", "注册表 + 配置文件");
await _activationService.EnableIWBForNonTouchAsync();
p.UpdateStatus("完成", "IWB 模式已启用,重启生效");
});
BoardStatus.Text = "IWB 已启用";
}
private async void ActivatePro_Click(object s, RoutedEventArgs e)
{
var dlg = new ActivateDialog();