diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs index 46ce98439e..3c2a88094f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.IO; using System.Reflection; +using System.Runtime.InteropServices; using Microsoft.Extensions.DependencyInjection; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -9,6 +10,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.NuGet; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli @@ -70,7 +72,7 @@ namespace Volo.Abp.Cli private void CheckDependencies() { var installedNpmPackages = GetInstalledNpmPackages(); - + if (!installedNpmPackages.Contains(" yarn@")) { InstallYarn(); @@ -87,9 +89,9 @@ namespace Volo.Abp.Cli using (var process = new Process()) { - process.StartInfo = new ProcessStartInfo("CMD.exe") + process.StartInfo = new ProcessStartInfo(CmdHelper.GetFileName()) { - Arguments = "/C npm list -g --depth 0", + Arguments = CmdHelper.GetArguments("npm list -g --depth 0"), UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, @@ -113,15 +115,13 @@ namespace Volo.Abp.Cli private void InstallYarn() { Logger.LogInformation("Installing yarn..."); - var process = Process.Start("CMD.exe", "/C npm install yarn -g"); - process.WaitForExit(); + CmdHelper.RunCmd("npm install yarn -g"); } private void InstallGulp() { Logger.LogInformation("Installing gulp..."); - var process = Process.Start("CMD.exe", "/C npm install gulp -g"); - process.WaitForExit(); + CmdHelper.RunCmd("npm install gulp -g"); } private async Task CheckForNewVersion() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs index d3178adcb3..d3c324431b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.IO; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.ProjectModification @@ -12,8 +13,7 @@ namespace Volo.Abp.Cli.ProjectModification var moduleName = ParseModuleName(module); var migrationName = "Added_" + moduleName + "_Module" + GetUniquePostFix(); - var process = Process.Start("CMD.exe", "/C cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef migrations add " + migrationName); - process.WaitForExit(); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef migrations add " + migrationName); if (updateDatabase) { @@ -23,8 +23,7 @@ namespace Volo.Abp.Cli.ProjectModification protected void UpdateDatabase(string csprojFile) { - var process = Process.Start("CMD.exe", "/C cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef database update"); - process.WaitForExit(); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef database update"); } protected virtual string ParseModuleName(string fullModuleName) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs index 01a0f00af0..c9225b62f0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.Runtime.InteropServices; namespace Volo.Abp.Cli.Utils { @@ -12,8 +13,31 @@ namespace Volo.Abp.Cli.Utils public static void RunCmd(string command) { - var procStartInfo = new ProcessStartInfo("cmd.exe", "/C " + command); + var procStartInfo = new ProcessStartInfo(GetFileName(), GetArguments(command)); Process.Start(procStartInfo).WaitForExit(); } + + public static string GetArguments(string command) + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return "-c \"" + command + "\""; + } + + //Windows default. + return "/C \"" + command + "\""; + } + + public static string GetFileName() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + //TODO: Test this. it should work for both operaion systems. + return "/bin/bash"; + } + + //Windows default. + return "cmd.exe"; + } } }