diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 3a3414500c..1c4fd09e7a 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -204,25 +204,30 @@ namespace Wox.Plugin.Program.Programs private static IEnumerable ProgramPaths(string directory, string[] suffixes) { - if (Directory.Exists(directory)) + if (!Directory.Exists(directory)) + return new string[] { }; + + var ds = Directory.GetDirectories(directory); + + var paths = ds.SelectMany(d => { - IEnumerable files; try { - files = Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories); + var paths_for_suffixes = suffixes.SelectMany(s => + { + var pattern = $"*.{s}"; + var ps = Directory.EnumerateFiles(d, pattern, SearchOption.AllDirectories); + return ps; + }); + return paths_for_suffixes; } catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException) { - Log.Exception($"|Program.Win32.ProgramPaths|Can't parse directory <{directory}>", e); - return new string[] { }; + Log.Exception($"|Program.Win32.ProgramPaths|Don't have permission on <{directory}>", e); + return new List(); } - files = files.Where(f => suffixes.Contains(Extension(f))); - return files; - } - else - { - return new string[] { }; - } + }); + return paths; } private static string Extension(string path)