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