dotnet 执行命令常用代码

private int Execute(string str, bool silence = false)
{
    int result;
    try
    {
        Console.WriteLine("nuget " + str);
        Process process = this.ExecuteCMD(str);
        StringBuilder stringBuilder = new StringBuilder();
        using (StreamReader standardOutput = process.StandardOutput)
        {
            while (!standardOutput.EndOfStream)
            {
                string text = standardOutput.ReadLine();
                Console.WriteLine(text);
                if (text.Contains("forbidden"))
                {
                    process.Kill();
                    process.WaitForExit();
                    throw new Exception("权限不足");
                }
                stringBuilder.Append(text);
            }
        }
        string str2 = process.StandardError.ReadToEnd();
        process.WaitForExit();
        int exitCode= process.ExitCode;
        if (exitCode!= 0) { 

        string text2 = stringBuilder.ToString() + "\r\n" + str2; Console.WriteLine(text2);
        
if (!silence) {
          
throw new Exception(text2);
        }
      Console.WriteLine(
"nuget operation failed to achieve the desired effect.");
  }
   result
=exitCode;
}
catch (Exception) { throw; }
return result;
}

 

 

private Process ExecuteCMD(string str)
{
    ProcessStartInfo startInfo;
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
    {
        str = " /usr/local/bin/nuget.exe " + str;
        startInfo = new ProcessStartInfo("mono", str)
        {
            RedirectStandardOutput = true,
            CreateNoWindow = false,
            ErrorDialog = false,
            RedirectStandardError = true
        };
    }
    else
    {
        startInfo = new ProcessStartInfo("nuget", str)
        {
            RedirectStandardOutput = true,
            CreateNoWindow = false,
            ErrorDialog = false,
            RedirectStandardError = true
        };
    }
    return Process.Start(startInfo);
}

 

private string ExecuteCMDWithOutput(string str)
{
    Process process = Process.Start(new ProcessStartInfo("nuget", str)
    {
        RedirectStandardOutput = true,
        CreateNoWindow = false
    });
    string result = string.Empty;
    using (StreamReader standardOutput = process.StandardOutput)
    {
        while (!standardOutput.EndOfStream)
        {
            string text = standardOutput.ReadLine();
            if (text.Contains("xxx") || text.Contains("xxx"))
            {
                result = text;
            }
        }
        if (!process.HasExited)
        {
            process.Kill();
            return result;
        }
    }
    return result;
}
posted @ 2020-01-15 14:17  wolbo  阅读(529)  评论(0编辑  收藏  举报