From 808523b814ddbb82c6ac13f1da697342bc29b6a0 Mon Sep 17 00:00:00 2001 From: LiuJianhua Date: Wed, 8 Mar 2017 09:44:04 +0800 Subject: [PATCH] Fix folder UnauthorizedAccessException #1282 #1357 --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 29 ++++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) 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)