Cli: Option to always hide CMD output and prevent opining new window

pull/13611/head
Yunus Emre Kalkan 3 years ago
parent 6e7e79087f
commit 79df781513

@ -16,6 +16,8 @@ public class AbpCliOptions
/// Default value: "CLI".
/// </summary>
public string ToolName { get; set; } = "CLI";
public bool AlwaysHideExternalCommandOutput { get; set; }
public AbpCliOptions()
{

@ -2,6 +2,7 @@
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Utils;
@ -10,6 +11,13 @@ public class CmdHelper : ICmdHelper, ITransientDependency
{
private const int SuccessfulExitCode = 0;
protected AbpCliOptions CliOptions { get; }
public CmdHelper(IOptionsSnapshot<AbpCliOptions> cliOptions)
{
CliOptions = cliOptions.Value;
}
public void OpenWebPage(string url)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
@ -27,10 +35,15 @@ public class CmdHelper : ICmdHelper, ITransientDependency
}
}
public void Run(string file, string arguments)
{
var procStartInfo = new ProcessStartInfo(file, arguments);
if (CliOptions.AlwaysHideExternalCommandOutput)
{
HideNewCommandWindow(procStartInfo);
}
Process.Start(procStartInfo)?.WaitForExit();
}
@ -46,6 +59,11 @@ public class CmdHelper : ICmdHelper, ITransientDependency
GetArguments(command)
);
if (CliOptions.AlwaysHideExternalCommandOutput)
{
HideNewCommandWindow(procStartInfo);
}
if (!string.IsNullOrEmpty(workingDirectory))
{
procStartInfo.WorkingDirectory = workingDirectory;
@ -66,10 +84,14 @@ public class CmdHelper : ICmdHelper, ITransientDependency
GetArguments(command)
);
if (CliOptions.AlwaysHideExternalCommandOutput)
{
HideNewCommandWindow(procStartInfo);
}
if (!string.IsNullOrEmpty(workingDirectory))
{
procStartInfo.WorkingDirectory = workingDirectory;
procStartInfo.CreateNoWindow = false;
}
return Process.Start(procStartInfo);
@ -98,6 +120,7 @@ public class CmdHelper : ICmdHelper, ITransientDependency
Arguments = GetArguments(command),
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true
};
@ -137,6 +160,11 @@ public class CmdHelper : ICmdHelper, ITransientDependency
{
procStartInfo.WorkingDirectory = workingDirectory;
}
if (CliOptions.AlwaysHideExternalCommandOutput)
{
HideNewCommandWindow(procStartInfo);
}
Process.Start(procStartInfo);
Environment.Exit(0);
@ -178,4 +206,10 @@ public class CmdHelper : ICmdHelper, ITransientDependency
$"Framework: {System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription} | " +
$"Process Architecture{System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture}");
}
private void HideNewCommandWindow(ProcessStartInfo procStartInfo)
{
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
procStartInfo.CreateNoWindow = true;
}
}

Loading…
Cancel
Save