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

C#中Process类使用异常:执行cmd命令时进程立即退出求助

解决你的C# Process执行CMD命令失败问题

首先,咱们来拆解下你新代码里的几个关键问题,正是这些问题导致cmd窗口一闪而过、没执行命令:

问题1:工作目录设置错误

你把WorkingDirectory设成了C:\Windows\System32,但vpncli.exe和data.dat肯定不在这个系统目录里对吧?cmd在这个目录下找不到你要执行的程序和数据文件,自然直接退出了。你应该把工作目录设为vpncli.exe所在的实际目录。

问题2:多余的标准输入重定向

你的命令里已经通过< data.dat指定了输入来源,完全不需要开启RedirectStandardInput,也没必要调用pro.StandardInput.Flush()和Close()——这反而会打乱cmd的输入处理逻辑,导致命令执行异常。

问题3:输出路径存在冗余

看你拼接的输出路径:

C:\\BicoinMiningProject\\BitcoinCloudMiningBypassApp\\BitcoinMiningProject\\BitcoinCloudMiningBypassApp\\bin\\Debug\\VPN_Status.txt

里面重复了BitcoinCloudMiningBypassApp\\BitcoinMiningProject,这大概率是拼写失误,会导致系统找不到输出目录,也会让命令执行失败。


修正后的完整代码

我把这些问题都修复了,你可以参考:

// 替换成vpncli.exe所在的实际目录
string vpnWorkingDir = @"C:\Path\To\Your\VpnCliDirectory";
// 修正后的输出路径,去掉冗余部分
string outputPath = @"C:\BicoinMiningProject\BitcoinCloudMiningBypassApp\bin\Debug\VPN_Status.txt";

using (var pro = new Process())
{
    pro.StartInfo.WorkingDirectory = vpnWorkingDir;
    pro.StartInfo.FileName = "cmd.exe";
    pro.StartInfo.CreateNoWindow = false;
    // 不需要重定向标准输入,命令里已经用< data.dat指定了
    pro.StartInfo.RedirectStandardInput = false;
    pro.StartInfo.RedirectStandardOutput = false;
    pro.StartInfo.UseShellExecute = false;
    pro.StartInfo.Arguments = $"/C vpncli.exe -s < data.dat & vpncli.exe status > \"{outputPath}\"";
    
    pro.Start();
    pro.WaitForExit();
    
    // 可以在这里检查退出码,确认命令是否执行成功
    if (pro.ExitCode == 0)
    {
        Console.WriteLine("命令执行成功!");
    }
    else
    {
        Console.WriteLine($"命令执行失败,退出码:{pro.ExitCode}");
    }
}

额外提示

如果还是有问题,你可以把CreateNoWindow设为false的同时,把/C改成/K,这样cmd窗口执行完不会关闭,你能看到具体的错误提示(比如“找不到文件”之类的),方便排查问题。测试完记得改回/C哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:46:03