1条回答 默认 最新
关注
【以下回答由 GPT 生成】
由于安全方面的考虑,C#程序使用Process类调用外部程序时,并不会自动将外部程序的输出返回到C#程序中。这就是为什么您的C#程序在调用cmd.exe执行wsl命令时无法得到返回值的原因。
为了解决这个问题,您可以通过以下步骤将外部程序的输出返回给C#程序:
-
使用Process类调用cmd.exe,并设置RedirectStandardOutput和RedirectStandardError属性为true,以便将cmd.exe的输出和错误流重定向到C#程序。
csharp Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/c wsl ~ -e bash 1.sh"; ProcessStartInfo.RedirectStandardOutput = true; ProcessStartInfo.RedirectStandardError = true; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true;
-
订阅Process对象的OutputDataReceived和ErrorDataReceived事件,以便在接收到输出和错误数据时进行处理。
csharp process.OutputDataReceived += new DataReceivedEventHandler(OutputDataReceivedHandler); process.ErrorDataReceived += new DataReceivedEventHandler(ErrorDataReceivedHandler);
-
在事件处理程序中,您可以将输出和错误数据保存到List或StringBuilder等对象中,以便稍后进行处理。 ```csharp List outputLines = new List(); List errorLines = new List();
private void OutputDataReceivedHandler(object sender, DataReceivedEventArgs e) { if (!String.IsNullOrEmpty(e.Data)) { outputLines.Add(e.Data); } }
private void ErrorDataReceivedHandler(object sender, DataReceivedEventArgs e) { if (!String.IsNullOrEmpty(e.Data)) { errorLines.Add(e.Data); } } ```
-
启动并等待外部程序执行完毕,并同时开始异步读取输出和错误流。
csharp process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit();
-
处理输出和错误数据,您可以在此处将数据打印到控制台、保存到文件或进行其他操作。 ```csharp Console.WriteLine("Output:"); foreach (string line in outputLines) { Console.WriteLine(line); }
Console.WriteLine("Error:"); foreach (string line in errorLines) { Console.WriteLine(line); } ```
使用以上步骤,您应该能够在C#程序中成功获取到wsl命令的输出和错误信息。
请注意,调用外部命令可能存在安全风险,请确保您已经仔细检查并验证传递给cmd.exe的参数。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报-
悬赏问题
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 易优eyoucms关于二级栏目调用的问题
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题