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
相关产品推荐
相关产品推荐

