gpt4 book ai didi

c# - 写入 Windows 中正在运行的进程的标准输入

转载 作者:太空狗 更新时间:2023-10-30 00:06:37 25 4
gpt4 key购买 nike

我想从 Windows 中的外部进程将数据写入现有进程的 stdin

我在 Linux 上发现了类似的问题,但我想知道如何在 Windows 中做同样的事情。

How to write data to existing process's STDIN from external process?

How do you stream data into the STDIN of a program from different local/remote processes in Python?

https://serverfault.com/questions/443297/write-to-stdin-of-a-running-process-using-pipe

我尝试使用这段代码,但出现错误。我还尝试运行该程序,使用此代码将 stdin 发送到该程序,但同样,它出错了。

在命令行中:

type my_input_string | app.exe -start
my_input_string | app.exe -start
app.exe -start < pas.txt

在 python 中:

p = subprocess.Popen('"C:\app.exe" -start', stdin=subprocess.PIPE, universal_newlines=True, shell=True)  
grep_stdout = p.communicate(input='my_input_string')[0]

我得到的错误是:

ReadConsole() failed: The handle is invalid.

在 C# 中:

try
{
var startInfo = new ProcessStartInfo();
startInfo.RedirectStandardInput = true;
startInfo.FileName = textBox1.Text;
startInfo.Arguments = textBox2.Text;
startInfo.UseShellExecute = false;

var process = new Process();
process.StartInfo = startInfo;
process.Start();
Thread.Sleep(1000);
var streamWriter = process.StandardInput;
streamWriter.WriteLine("1");
}
catch (Exception ex)
{
textBox4.Text = ex.Message+"\r\n"+ex.Source;
}

Screenshot of windows, front-most says "client.exe has stopped working".

在 C# 中,使用上面的代码,App.exe(启动另一个进程的命令行应用程序)崩溃,但在 C# 应用程序中我没有任何异常。我认为这是因为 UseShellExecute = false

如果我在运行 C# 应用程序时选择“不要在后台运行应用程序”,我可以找到进程并使用 sendkeysmy_input_string 发送给它,但这不是一个好主意,因为用户可以在运行 GUI 时看到命令行。

如何仅使用 CMD、python 脚本或 C# 发送 stdin,而不会出现任何错误?

最佳答案

如果您正在启动,然后从 c# 提供输入,您可以执行如下操作:

var startInfo = new ProcessStartInfo("path/to/executable");
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;

var process = new Process();
process.StartInfo = startInfo;
process.Start();

var streamWriter = process.StandardInput;
streamWriter.WriteLine("I'm supplying input!");

如果您需要写入已运行的应用程序的标准输入,我怀疑使用 .net 类很容易做到这一点,因为 Process 类不会为您提供 StandardInput(它将而是抛出一个 InvalidOperationException)

编辑:向 ProcessStartInfo()

添加了参数

关于c# - 写入 Windows 中正在运行的进程的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com