如何在C#中运行Portalum.Zvt.EasyPay.exe并获取退出码?
在C#中运行Portalum.Zvt.EasyPay.exe并获取退出码
我需要在C#程序里运行Portalum.Zvt.EasyPay.exe,传入参数--amount 1.23,同时获取它的退出码。开发者提供了Java、PowerShell、CMD的示例,但我自己用CMD调用的方式既不简洁,还没法正确获取退出码,我的现有代码如下:
Process ps = new Process(); ps.StartInfo.FileName = "cmd.exe"; ps.StartInfo.WindowStyle = ProcessWindowStyle.Normal; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.Arguments = @"/k start /w /d ""C:\Users\jschw\Downloads\Portalum.Zvt.EasyPay\""" Portalum.Zvt.EasyPay.exe --amount 1.23"; ps.Start(); ps.StartInfo.Arguments = @"/k echo %errorlevel%"; ps.Start(); ps.WaitForExit(); Console.WriteLine(ps.StandardOutput.ReadToEnd());
正确的C#实现方式
不需要通过CMD中转,直接调用目标程序即可,这样既简洁又能准确获取退出码。
代码示例
using System.Diagnostics; // 配置进程启动信息 var processStartInfo = new ProcessStartInfo { // 注意:如果程序不在系统PATH中,必须填写完整的文件路径 FileName = @"C:\Users\jschw\Downloads\Portalum.Zvt.EasyPay\Portalum.Zvt.EasyPay.exe", Arguments = "--amount 1.23", // 根据需求设置窗口显示样式,不需要显示可设为ProcessWindowStyle.Hidden WindowStyle = ProcessWindowStyle.Normal }; // 启动进程并等待其退出 using var process = Process.Start(processStartInfo); process.WaitForExit(); // 获取并输出退出码 int exitCode = process.ExitCode; Console.WriteLine($"程序退出码:{exitCode}");
原代码问题说明
- 多余的CMD中转:直接调用目标程序更高效,通过CMD会额外启动命令行进程,增加不必要的复杂度。
- 参数拼接错误:原代码中
Arguments的字符串拼接存在语法问题,导致CMD无法正确解析命令。 - 重复调用Start():同一个
Process对象不能多次调用Start(),第二次调用会抛出异常,根本无法获取第一个进程的退出码。
补充说明
如果需要捕获程序的输出或错误信息,可添加以下配置:
processStartInfo.RedirectStandardOutput = true; processStartInfo.RedirectStandardError = true; processStartInfo.UseShellExecute = false;
之后通过process.StandardOutput.ReadToEnd()或process.StandardError.ReadToEnd()获取对应内容。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

