From bed65745cc48a99a37e020174a7aef22279ab434 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sun, 24 Apr 2016 13:35:21 +0100 Subject: [PATCH] Use WorkingDirectory when strat process As proposed in #569 --- Plugins/Wox.Plugin.CMD/CMD.cs | 1 + Plugins/Wox.Plugin.Program/IProgramSource.cs | 5 ++-- Plugins/Wox.Plugin.Program/Program.cs | 6 ++-- .../ProgramSources/AppPathsProgramSource.cs | 2 +- Plugins/Wox.Plugin.Program/Programs.cs | 28 +++++++++++-------- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Plugins/Wox.Plugin.CMD/CMD.cs b/Plugins/Wox.Plugin.CMD/CMD.cs index 56d4bffd75..b57311e2c4 100644 --- a/Plugins/Wox.Plugin.CMD/CMD.cs +++ b/Plugins/Wox.Plugin.CMD/CMD.cs @@ -163,6 +163,7 @@ namespace Wox.Plugin.CMD { UseShellExecute = true, FileName = "cmd.exe", + WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), Arguments = arguments, Verb = runAsAdministrator ? "runas" : "" }; diff --git a/Plugins/Wox.Plugin.Program/IProgramSource.cs b/Plugins/Wox.Plugin.Program/IProgramSource.cs index ad0a3da2b3..6df37995c9 100644 --- a/Plugins/Wox.Plugin.Program/IProgramSource.cs +++ b/Plugins/Wox.Plugin.Program/IProgramSource.cs @@ -24,13 +24,14 @@ namespace Wox.Plugin.Program { Title = Path.GetFileNameWithoutExtension(file), IcoPath = file, - ExecutePath = file + Path = file, + Directory = Directory.GetParent(file).FullName }; switch (Path.GetExtension(file).ToLower()) { case ".exe": - p.ExecuteName = Path.GetFileName(file); + p.ExecutableName = Path.GetFileName(file); try { FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(file); diff --git a/Plugins/Wox.Plugin.Program/Program.cs b/Plugins/Wox.Plugin.Program/Program.cs index d1501c3bea..e8c59ac1fc 100644 --- a/Plugins/Wox.Plugin.Program/Program.cs +++ b/Plugins/Wox.Plugin.Program/Program.cs @@ -8,11 +8,11 @@ namespace Wox.Plugin.Program [Serializable] public class Program { - private static readonly Regex AbbrRegexp = new Regex("[^A-Z0-9]", RegexOptions.Compiled); public string Title { get; set; } public string IcoPath { get; set; } - public string ExecutePath { get; set; } - public string ExecuteName { get; set; } + public string Path { get; set; } + public string Directory { get; set; } + public string ExecutableName { get; set; } public int Score { get; set; } public IProgramSource Source { get; set; } } diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs index de2b2c52f6..51caa7caf4 100644 --- a/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs +++ b/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs @@ -54,7 +54,7 @@ namespace Wox.Plugin.Program.ProgramSources if (!File.Exists(path)) continue; var entry = CreateEntry(path); - entry.ExecuteName = item; + entry.ExecutableName = item; entry.Source = this; list.Add(entry); } diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index 94ae699748..09fa80b5da 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -57,13 +57,18 @@ namespace Wox.Plugin.Program .Select(p => new Result { Title = p.Title, - SubTitle = p.ExecutePath, + SubTitle = p.Path, IcoPath = p.IcoPath, Score = p.Score, ContextData = p, Action = e => { - var hide = StartProcess(new ProcessStartInfo(p.ExecutePath)); + var info = new ProcessStartInfo + { + FileName = p.Path, + WorkingDirectory = p.Directory + }; + var hide = StartProcess(info); return hide; } }).ToList(); @@ -74,8 +79,8 @@ namespace Wox.Plugin.Program { var score1 = StringMatcher.Score(program.Title, query); var score2 = StringMatcher.ScoreForPinyin(program.Title, query); - var score3 = StringMatcher.Score(program.ExecuteName, query); - var score = new[] {score1, score2, score3}.Max(); + var score3 = StringMatcher.Score(program.ExecutableName, query); + var score = new[] { score1, score2, score3 }.Max(); program.Score = score; return score; } @@ -119,7 +124,7 @@ namespace Wox.Plugin.Program _programs = _sources.AsParallel() .SelectMany(s => s.LoadPrograms()) // filter duplicate program - .GroupBy(x => new { x.ExecutePath, x.ExecuteName }) + .GroupBy(x => new { ExecutePath = x.Path, ExecuteName = x.ExecutableName }) .Select(g => g.First()) .ToList(); @@ -200,11 +205,13 @@ namespace Wox.Plugin.Program Title = _context.API.GetTranslation("wox_plugin_program_run_as_administrator"), Action = _ => { - var hide = StartProcess(new ProcessStartInfo + var info = new ProcessStartInfo { - FileName = p.ExecutePath, + FileName = p.Path, + WorkingDirectory = p.Directory, Verb = "runas" - }); + }; + var hide = StartProcess(info); return hide; }, IcoPath = "Images/cmd.png" @@ -214,10 +221,7 @@ namespace Wox.Plugin.Program Title = _context.API.GetTranslation("wox_plugin_program_open_containing_folder"), Action = _ => { - //get parent folder - var folderPath = Directory.GetParent(p.ExecutePath).FullName; - //open the folder - var hide = StartProcess(new ProcessStartInfo(folderPath)); + var hide = StartProcess(new ProcessStartInfo(p.Directory)); return hide; }, IcoPath = "Images/folder.png"