You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Process重定向StandardInput时出错,寻求解决方法

解决C#进程标准输入重定向报错"StandardIn has not been redirected."

可能的原因及修复方案

1. 输出读取时机错误导致阻塞

你的代码中先调用process.WaitForExit()再读取StandardOutput,如果子进程输出缓冲区被填满,会导致子进程挂起,进而引发输入流状态异常。调整读取输出的顺序,在写入输入前先异步读取输出,避免缓冲区阻塞:

static void ExecuteExecutable(string executablePath, string file, string fileName)
{
    ProcessStartInfo psi = new ProcessStartInfo
    {
        FileName = executablePath,
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    using (Process process = new Process())
    {
        process.StartInfo = psi;
        
        // 验证进程是否成功启动
        if (!process.Start())
        {
            Console.WriteLine("无法启动目标进程,请检查路径是否正确");
            return;
        }

        // 异步读取输出,避免缓冲区阻塞子进程
        Task<string> outputTask = process.StandardOutput.ReadToEndAsync();

        // 写入输入数据
        process.StandardInput.WriteLine(file);
        process.StandardInput.WriteLine(fileName);
        // 关闭输入流,告知子进程没有更多输入
        process.StandardInput.Close();

        process.WaitForExit();

        // 获取输出结果
        string output = outputTask.Result;
        Console.WriteLine(output);
    }
}

2. 进程启动失败

如果目标可执行文件路径错误、权限不足或不存在,进程启动失败后StandardInput会处于未初始化状态,触发该错误。你可以通过process.Start()的返回值判断是否启动成功,同时确认executablePath是绝对路径,或目标文件在当前进程的工作目录下。

3. 启动信息被意外修改

检查代码中是否有其他地方修改了process.StartInfo的属性,比如在process.Start()之前,是否有代码将RedirectStandardInput改回false,或把UseShellExecute设为true——这两个属性必须严格保持UseShellExecute=false、RedirectStandardInput=true才能启用输入重定向。

4. 目标进程不支持标准输入

如果dist.exe本身不接收标准输入数据,即使重定向配置正确,写入操作也可能引发异常,但这种情况通常不会触发"StandardIn has not been redirected"错误,可以先测试用命令行手动向dist.exe输入数据,确认它支持标准输入读取。

内容的提问来源于stack exchange,提问作者Frost Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:42:20