执行exe时StandardError和StandardOutput为空

问题描述 投票:0回答:1

我正在尝试为自己制作一个简单的winform gui

在 cmd 中手动运行 bbmod.exe 时,它将写入错误和一些文本,或者如果您提供正确的参数,则会写入一些成功文本。

但是当运行exe(通过双击它)时,它只会闪烁一毫秒。 当我尝试通过这个过程运行它时,也会发生同样的情况,并且输出流都是空的,标准流和错误流都是空的。

Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = @"D:\tools\BBMOD\stann_gui\BBMOD_launch.bat";

p.Start();

string output = p.StandardOutput.ReadToEnd();

p.WaitForExit();

textBoxLog.Text = output;

我尝试了标准输出和标准错误 我还尝试使用 /k 参数创建一个运行相同 .exe 的 .bat 文件(使其不会立即关闭)

但是从输出返回的只是 bat 文件中的文本。

我也只是忽略了尝试写入我自己的文本框,而只是让 bat 文件使控制台窗口显示文本。但我更喜欢在程序中获得输出

c# winforms cmd process exe
1个回答
0
投票

我对示例 bat 文件进行了快速检查,这应该可以工作。 我正在使用 cmd 运行 .bat 文件

 Process process = new Process();
 
 ProcessStartInfo startInfo = new ProcessStartInfo
 {
     FileName = "cmd.exe", // Use cmd.exe to run the batch file
     Arguments = "/c test.bat", // Pass the batch file as an argument to cmd.exe
     RedirectStandardOutput = true, 
     RedirectStandardError = true, 
     UseShellExecute = false, 
     CreateNoWindow = true 
 };

 process.StartInfo = startInfo;
 process.Start();

 string output = process.StandardOutput.ReadToEnd();
 string error = process.StandardError.ReadToEnd();

 process.WaitForExit();

 Console.WriteLine("Standard Output:");
 Console.WriteLine(output);

 Console.WriteLine("Standard Error:");
 Console.WriteLine(error);

测试.bat

@echo off

echo This is standard output
echo This is standard error >&2
© www.soinside.com 2019 - 2024. All rights reserved.