c# - 通过参数从进程中获取退出代码
问题描述
我试图从我的程序启动 CMD 进程,该进程启动另一个将输出和错误重定向到文件的进程。我必须有这个过程的退出代码。
var exe = pathToExe
var output = Path.GetTempFileName();
var process = Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = $"/c "{exe} {command} > {output} 2<&1" & echo %errorlevel% > {output})",
Verb = "runas",
UseShellExecute = true,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
});
process.WaitForExit();
var res = File.ReadAllText(output);
Console.WriteLine(res);
相同的命令(cmd /c "pathToExe command > output 2<&1" & echo %errorlevel% > output)在 cmd 中运行良好,但在此代码中错误级别始终为 0(我建议它只是 cmd 进程的错误级别)
此时你可能会问我为什么我什至使用 cmd 来启动进程......好吧,我试过了
using (var process = CreateProcess(processName, argumnets))
{
var error = 0;
var output = Path.GetTempFileName();
process.StartInfo.UseShellExecute = true;
process.StartInfo.Verb = "runas";
process.StartInfo.Arguments = $"{command} > {output} 2<&1";
process.Start();
process.WaitForExit();
statusInfo = File.ReadAllText(output);
File.Delete(output);
if (process.ExitCode != 0)
{
error = process.ExitCode;
}
return error;
}
但这对我不起作用。由于 process.StartInfo.UseShellExecute,我也无法以编程方式重定向输出。
解决方案
推荐阅读
- css - 如何在不破坏 Nth-Child 逻辑的情况下将 Div 插入 Flexbox 砖墙?
- core-data - CoreData 上下文不更新并且 bool 总是假的?
- javascript - Dropzone 上传大小限制为 256MB,甚至设置为 2000MB
- java - java:如何将多线串转换为多边形
- php - Inject Blade Array into script using HTML data attribute
- javascript - 即使承诺成功返回,DynamoDB 也没有删除该项目?
- php - 如何在一周内向同一个 ID 插入数据,但在下一周添加另一个 ID
- mysql - 在组合两个查询时多次重复相同的值
- twilio - 是否可以在 Twilio Studio 中连接流?
- java - Java 重新验证();将已重新定位的对象移回原始位置