C# 执行时无法从 .exe 读取输出
C# Unable to read output from .exe when executing
我的问题是当我执行给定命令时没有输出。
该 exe 需要很长时间才能完成,并且在执行时我期望输出连续的数据流。
但出于某种原因,我的程序似乎只是忽略了 exe 的输出。
我觉得我已经尝试了所有方法,但没有运气。
我已经尝试过其他命令,例如“tree c:/”,我能够很好地接收到该输出。
我确定我正在执行的命令是有效的。
我已经在单独的 cmd 中单独测试了该命令,它可以正常工作。
我也试过 运行 只有 exe 的进程。
这也屈服于输出。
我已经坚持了一段时间,所以任何帮助将不胜感激。
Task.Run(() =>
{
string command = downloadPath + @"\myinstall.exe quickinstallall";
var startInfo = new ProcessStartInfo("cmd.exe")
{
WorkingDirectory = downloadPath,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardError = true,
RedirectStandardOutput = true,
WindowStyle = ProcessWindowStyle.Normal,
CreateNoWindow = false,
Verb = "runas"
};
Process cmd = new Process { StartInfo = startInfo };
cmd.EnableRaisingEvents = true;
cmd.OutputDataReceived += UpdateOutput;
cmd.ErrorDataReceived += UpdateOutput;
cmd.Start();
cmd.BeginOutputReadLine();
cmd.StandardInput.WriteLine(command);
cmd.BeginErrorReadLine();
cmd.WaitForExit();
});
好的,我想通了为什么没有记录输出。
我只是缺少 2 行代码...
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
和
我不得不删除 runas
,而是从应用程序本身继承管理员权限。
通过“继承管理员权限”,我的意思只是确保应用程序始终以管理员身份执行。
我不知道为什么这完全解决了我的问题,但它现在似乎运行良好。
如果有人知道为什么会这样,我很想知道。
我的问题是当我执行给定命令时没有输出。
该 exe 需要很长时间才能完成,并且在执行时我期望输出连续的数据流。
但出于某种原因,我的程序似乎只是忽略了 exe 的输出。
我觉得我已经尝试了所有方法,但没有运气。
我已经尝试过其他命令,例如“tree c:/”,我能够很好地接收到该输出。
我确定我正在执行的命令是有效的。
我已经在单独的 cmd 中单独测试了该命令,它可以正常工作。
我也试过 运行 只有 exe 的进程。 这也屈服于输出。
我已经坚持了一段时间,所以任何帮助将不胜感激。
Task.Run(() =>
{
string command = downloadPath + @"\myinstall.exe quickinstallall";
var startInfo = new ProcessStartInfo("cmd.exe")
{
WorkingDirectory = downloadPath,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardError = true,
RedirectStandardOutput = true,
WindowStyle = ProcessWindowStyle.Normal,
CreateNoWindow = false,
Verb = "runas"
};
Process cmd = new Process { StartInfo = startInfo };
cmd.EnableRaisingEvents = true;
cmd.OutputDataReceived += UpdateOutput;
cmd.ErrorDataReceived += UpdateOutput;
cmd.Start();
cmd.BeginOutputReadLine();
cmd.StandardInput.WriteLine(command);
cmd.BeginErrorReadLine();
cmd.WaitForExit();
});
好的,我想通了为什么没有记录输出。 我只是缺少 2 行代码...
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
和
我不得不删除 runas
,而是从应用程序本身继承管理员权限。
通过“继承管理员权限”,我的意思只是确保应用程序始终以管理员身份执行。
我不知道为什么这完全解决了我的问题,但它现在似乎运行良好。 如果有人知道为什么会这样,我很想知道。