You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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}");

原代码问题说明

  1. 多余的CMD中转:直接调用目标程序更高效,通过CMD会额外启动命令行进程,增加不必要的复杂度。
  2. 参数拼接错误:原代码中Arguments的字符串拼接存在语法问题,导致CMD无法正确解析命令。
  3. 重复调用Start():同一个Process对象不能多次调用Start(),第二次调用会抛出异常,根本无法获取第一个进程的退出码。

补充说明

如果需要捕获程序的输出或错误信息,可添加以下配置:

processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
processStartInfo.UseShellExecute = false;

之后通过process.StandardOutput.ReadToEnd()或process.StandardError.ReadToEnd()获取对应内容。

内容的提问来源于stack exchange,提问作者Joshua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:04