From 6ac34ba8aa8e90a92079f766be9c40587a60c139 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Thu, 30 Apr 2026 14:44:49 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E5=90=AF=E5=8A=A8=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/App.xaml.cs | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs index 776cab59..8737e18f 100644 --- a/Ink Canvas/App.xaml.cs +++ b/Ink Canvas/App.xaml.cs @@ -231,6 +231,7 @@ namespace Ink_Canvas // 动态加载WMI监控 private void TrySetupWmiMonitoring() { + object watcher = null; try { // 检查System.Management程序集是否可用 @@ -254,7 +255,7 @@ namespace Ink_Canvas string queryString = $"SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.ProcessId = {currentProcessId}"; // 创建ManagementEventWatcher实例 - object watcher = Activator.CreateInstance(watcherType, queryString); + watcher = Activator.CreateInstance(watcherType, queryString); // 获取EventArrived事件信息 var eventInfo = watcherType.GetEvent("EventArrived"); @@ -271,13 +272,45 @@ namespace Ink_Canvas // 启动监听 var startMethod = watcherType.GetMethod("Start"); - startMethod.Invoke(watcher, null); + if (startMethod == null) + { + LogHelper.WriteLogToFile("未找到ManagementEventWatcher.Start方法,跳过WMI监控", LogHelper.LogType.Warning); + return; + } + + try + { + startMethod.Invoke(watcher, null); + } + catch (TargetInvocationException tiex) + { + var root = tiex.InnerException ?? tiex; + string rootType = root.GetType().FullName; + LogHelper.WriteLogToFile($"WMI监控启动失败: {rootType}: {root.Message}", LogHelper.LogType.Warning); + return; + } LogHelper.WriteLogToFile("已成功启动WMI进程监控"); } catch (Exception ex) { - LogHelper.WriteLogToFile($"动态加载WMI监控失败: {ex.Message}", LogHelper.LogType.Warning); + var root = ex is TargetInvocationException outerTie && outerTie.InnerException != null + ? outerTie.InnerException + : ex; + string rootType = root.GetType().FullName; + LogHelper.WriteLogToFile($"动态加载WMI监控失败: {rootType}: {root.Message}", LogHelper.LogType.Warning); + try + { + if (watcher != null) + { + var stopMethod = watcher.GetType().GetMethod("Stop"); + stopMethod?.Invoke(watcher, null); + } + } + catch + { + // 忽略清理阶段异常,避免覆盖原始错误信息 + } } }