【问题标题】:How to get the error code and its description of a process如何获取错误代码及其对进程的描述
【发布时间】:2014-09-19 06:43:13
【问题描述】:

如何在 C# 代码中检查进程是否成功执行?下面是我用来检查的代码。检查p.ExitCode = 0 是否足以执行成功?如果是这样,那么如果我收到任何错误(即)ExitCode <> 0,如何获取错误描述?

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c " + command);
psi.RedirectStandardOutput = false;
psi.RedirectStandardError = false;
psi.UseShellExecute = true;
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;

Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();

MessageBox.Show("Error Code:" + p.ExitCode);

【问题讨论】:

标签: c# command-line process


【解决方案1】:

进程退出码的含义由进程定义。进程可能失败,但仍返回零错误代码。一个进程可能会成功并返回一个非零错误代码。虽然这两种可能性显然违反了惯例。

因此,为了解释错误代码,您需要查阅您正在执行的进程的文档。通常这些文档是不存在的,有时最方便的方法是读取标准输出和/或标准错误流并解析该文本以查找错误消息。

不管怎样,您的代码似乎不必要地复杂,您不应该在此处将UseShellExecute 设置为true。这样的代码看起来会更干净:

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c " + command);
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process process = Process.Start(psi);
process.WaitForExit();

【讨论】:

  • 我需要在命令行中运行 SFTP 命令。下面的链接告诉 0 是指成功执行。 winscp.net/eng/docs/sftp_codes#codes_list.
  • 这些是协议响应代码,而不是进程错误代码。使用 sftp 库比使用外部进程要好得多
  • 你能给我一些了解SFTP lib的参考网站吗?
  • 只需对 c# sftp 进行网络搜索
【解决方案2】:

psi.StandardError.ReadtoEnd() 应该会以字符串形式获取错误代码。

一个捕获是psi.UseShellExecute = false。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2020-06-10
    • 2021-10-18
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多