diff --git a/src/gsudo/Helpers/ArgumentsHelper.cs b/src/gsudo/Helpers/ArgumentsHelper.cs index 8952bfc7..6a8153e8 100644 --- a/src/gsudo/Helpers/ArgumentsHelper.cs +++ b/src/gsudo/Helpers/ArgumentsHelper.cs @@ -50,8 +50,7 @@ Running ./gsudo {command} should elevate the powershell command. else if (currentShell.In(Shell.PowerShell, Shell.PowerShellCore)) { var newArgs = new List(); - DoFixIfIsMicrosoftStoreApp(currentShellExeName, newArgs); - + newArgs.Add($"\"{currentShellExeName}\""); newArgs.Add("-NoLogo"); @@ -61,8 +60,8 @@ Running ./gsudo {command} should elevate the powershell command. newArgs.Add("-Command"); newArgs.AddMany(args); } - - return newArgs.ToArray(); + + return DoFixIfIsMicrosoftStoreApp(currentShellExeName, newArgs.ToArray()); } if (currentShell == Shell.Yori) @@ -99,17 +98,14 @@ Running ./gsudo {command} should elevate the powershell command. } else { - var newArgs = new List(); - DoFixIfIsMicrosoftStoreApp(exename, newArgs); - - newArgs.Add($"\"{exename}\""); // replace command name with full+absolute+quoted path to resolve many issues, like "Batch files not started by create process if no extension is specified." - newArgs.AddRange(args.Skip(1)); + args[0] = $"\"{exename}\""; + var newArgs = DoFixIfIsMicrosoftStoreApp(exename, args); return newArgs.ToArray(); } } } - private static void DoFixIfIsMicrosoftStoreApp(string targetExe, List newArgs) + private static string[] DoFixIfIsMicrosoftStoreApp(string targetExe, string[] args) { // -- Workaround for https://github.com/gerardog/gsudo/issues/65 @@ -122,10 +118,14 @@ private static void DoFixIfIsMicrosoftStoreApp(string targetExe, List ne if (targetExe.IndexOf("\\WindowsApps\\", StringComparison.OrdinalIgnoreCase) >= 0) // Terrible but cheap Microsoft Store App detection. { - Logger.Instance.Log("Workaround for target app installed via MSStore.", LogLevel.Debug); - newArgs.Add(Environment.GetEnvironmentVariable("COMSPEC")); - newArgs.Add("/c"); + Logger.Instance.Log("Applying workaround for target app installed via MSStore.", LogLevel.Debug); + return new string[] { + Environment.GetEnvironmentVariable("COMSPEC"), + "/s /c" , + $"\"{string.Join(" ", args)}\""}; } + else + return args; // -- End of workaround. } diff --git a/src/gsudo/Logger.cs b/src/gsudo/Logger.cs index bb743234..d9e27964 100644 --- a/src/gsudo/Logger.cs +++ b/src/gsudo/Logger.cs @@ -1,6 +1,4 @@ using System; -using System.Diagnostics; -using System.IO; namespace gsudo { @@ -16,7 +14,6 @@ public enum LogLevel class Logger { - public static int ProcessId = System.Diagnostics.Process.GetCurrentProcess().Id; public static readonly Logger Instance = new Logger(); private Logger() { } @@ -31,8 +28,6 @@ public void Log(string message, LogLevel level) Console.Error.WriteLine($"{level.ToString()}: {message}"); Console.ResetColor(); } - - //File.AppendAllText("C:\\test\\gsudolog.txt", $"{ProcessId}\t{level.ToString()}: {message}\r\n"); } catch { } }