From c00d8db5ade73f815507bfe9949c4e3bf1d76263 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 14 Aug 2025 14:39:58 +0800 Subject: [PATCH] Handle E_ABORT --- Flow.Launcher/PublicAPIInstance.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 37bc16d58..002e3c58b 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -8,6 +8,7 @@ using System.IO; using System.Linq; using System.Net; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using System.Windows; @@ -379,6 +380,21 @@ namespace Flow.Launcher explorer.Start(); } } + catch (COMException ex) when (ex.ErrorCode == unchecked((int)0x80004004)) + { + /* + * The COMException with HResult 0x80004004 is E_ABORT (operation aborted). + * Shell APIs often return this when the operation is canceled or the shell cannot complete it cleanly. + * It most likely comes from Win32Helper.OpenFolderAndSelectFile(targetPath). + * Typical triggers: + * The target file/folder was deleted/moved between computing targetPath and the shell call. + * The folder is on an offline network/removable drive. + * Explorer is restarting/busy and aborts the request. + * A selection request to a new/closing Explorer window is canceled. + * Because it is commonly user- or environment-driven and not actionable, + * we should treat it as expected noise and ignore it to avoid bothering users. + */ + } catch (Win32Exception ex) when (ex.NativeErrorCode == 2) { LogError(ClassName, "File Manager not found");