返回
C# 重定向进程标准输入输出,同时保持 UI 可见性
windows
2024-03-14 23:55:42
如何在 C# 中重定向具有 UI 的进程的标准输入和输出
问题:重定向与 UI 可见性
在 Windows 系统中,重定向具有 UI 的进程的标准输入时,其窗口会变得不可见。这是因为重定向输入流会阻止进程创建和显示其图形界面。
解决方法:平衡重定向和可见性
为了解决这一挑战,需要采取分步方法:
步骤指南
1. 初始化进程并设置重定向
// 初始化进程启动信息
ProcessStartInfo startInfo = new()
{
FileName = @"C:\Program Files\YourApp\YourApp.exe",
WorkingDirectory = @"C:\Program Files\YourApp",
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Normal,
CreateNoWindow = false,
RedirectStandardOutput = true,
};
// 创建并启动进程
Process process = new()
{
StartInfo = startInfo,
EnableRaisingEvents = true,
};
process.Start();
2. 处理进程输出
在启动进程后,使用 BeginOutputReadLine
方法在后台读取标准输出:
process.BeginOutputReadLine();
3. 延迟重定向标准输入
为了在启动进程后保留其 UI 可见性,延迟设置 RedirectStandardInput
为 true
。这里使用计时器来实现延迟:
Timer timer = new()
{
Interval = 2000, // 延迟 2 秒
};
timer.Tick += (sender, e) =>
{
// 延迟后设置重定向
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.UseShellExecute = false;
process.Start();
// 停止计时器
timer.Stop();
};
timer.Start();
4. 写入标准输入
延迟后,现在可以安全地重定向标准输入并写入它:
StreamWriter writer = process.StandardInput;
writer.WriteLine("Hello from the main process!");
常见问题解答
Q1:为什么重定向标准输入会使 UI 窗口不可见?
A1:在 Windows 系统中,重定向输入流会阻止进程创建和显示其图形界面,导致 UI 窗口不可见。
Q2:如何解决重定向与 UI 可见性之间的冲突?
A2:通过延迟设置 RedirectStandardInput
为 true
,可以在进程启动后保持其 UI 可见性。
Q3:延迟重定向标准输入会影响进程输出吗?
A3:否,延迟重定向标准输入不会影响进程输出。在延迟期间,进程的标准输出仍然可供读取。
Q4:是否可以同时重定向标准输入和输出?
A4:是的,按照本文中的步骤,可以同时重定向标准输入和输出,同时保持进程的可见性和交互性。
Q5:这个方法适用于所有 Windows 版本吗?
A5:是的,本文中的方法适用于 Windows 系统的各个版本。