From d0ded5cd9bf5070a120bad58b5be21fe2ac6a4ff Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期六, 20 十二月 2025 16:41:09 +0800
Subject: [PATCH] test
---
IDViewer_2D/AppRestartHelper.cs | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 102 insertions(+), 0 deletions(-)
diff --git a/IDViewer_2D/AppRestartHelper.cs b/IDViewer_2D/AppRestartHelper.cs
new file mode 100644
index 0000000..46505d5
--- /dev/null
+++ b/IDViewer_2D/AppRestartHelper.cs
@@ -0,0 +1,102 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace SmartScanner
+{
+ public static class AppRestartHelper
+ {
+ private const string TaskName = "MyApp_Restart_Task";
+
+ public static async Task RestartAsync()
+ {
+ try
+ {
+ // 1. 鍒涘缓涓存椂鎵瑰鐞嗘枃浠�
+ string batPath = CreateRestartBatchFile();
+
+ // 2. 鍒涘缓浠诲姟璁″垝
+ CreateScheduledTask(batPath);
+
+ // 3. 寤惰繜纭繚浠诲姟宸叉敞鍐�
+ await Task.Delay(500);
+
+ // 4. 鎵ц浠诲姟骞堕��鍑哄綋鍓嶅疄渚�
+ ExecuteRestartTask();
+
+ Application.Current.Shutdown();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"閲嶅惎澶辫触: {ex.Message}", "閿欒", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ }
+
+ private static string CreateRestartBatchFile()
+ {
+ string tempPath = Path.GetTempPath();
+ string batPath = Path.Combine(tempPath, $"{Guid.NewGuid()}_restart.bat");
+
+ string exePath = Process.GetCurrentProcess().MainModule.FileName;
+ string workingDir = Path.GetDirectoryName(exePath);
+
+ string batContent = $@"
+@echo off
+timeout /t 1 /nobreak > nul
+cd /d ""{workingDir}""
+start """" ""{exePath}""
+del ""%~f0""
+";
+
+ File.WriteAllText(batPath, batContent);
+ return batPath;
+ }
+
+ private static void CreateScheduledTask(string batPath)
+ {
+ // 鍒犻櫎鍙兘瀛樺湪鐨勬棫浠诲姟
+ DeleteExistingTask();
+
+ // 鍒涘缓鏂颁换鍔�
+ ProcessStartInfo psi = new ProcessStartInfo
+ {
+ FileName = "schtasks.exe",
+ Arguments = $"/Create /TN \"{TaskName}\" /TR \"{batPath}\" /SC ONCE /ST {DateTime.Now.AddSeconds(1):HH:mm:ss} /F",
+ WindowStyle = ProcessWindowStyle.Hidden,
+ CreateNoWindow = true
+ };
+
+ Process.Start(psi)?.WaitForExit(2000);
+ }
+
+ private static void ExecuteRestartTask()
+ {
+ Process.Start(new ProcessStartInfo
+ {
+ FileName = "schtasks.exe",
+ Arguments = $"/Run /TN \"{TaskName}\"",
+ WindowStyle = ProcessWindowStyle.Hidden,
+ CreateNoWindow = true
+ })?.WaitForExit(1000);
+
+ // 鍒犻櫎浠诲姟
+ DeleteExistingTask();
+ }
+
+ private static void DeleteExistingTask()
+ {
+ Process.Start(new ProcessStartInfo
+ {
+ FileName = "schtasks.exe",
+ Arguments = $"/Delete /TN \"{TaskName}\" /F",
+ WindowStyle = ProcessWindowStyle.Hidden,
+ CreateNoWindow = true
+ })?.WaitForExit(1000);
+ }
+ }
+}
--
Gitblit v1.9.3