写入已经运行的进程

phi*_*hil 5 c#

这是我的代码:

static void Main(string[] args)
{
    if(args.Length > 1)
    {
        int id;
        if(int.TryParse(args[0], out id))
        {
            try
            {
                var p = Process.GetProcessById(id);
                p.StandardInput.WriteLine(args[1]);
            }
            catch (ArgumentException)
            {
                Console.WriteLine($"Couldn't find process with id {id}");
            }
        }
        else
        {
            Console.WriteLine($"Couldn't find process with id {args[0]}");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的id有一个进程.工作正常然后我试图向它的标准输入发送一些东西.这引发了InvalidOperationException.注意:当我尝试获取StandardInput时发生异常,而不是在我尝试使用WriteLine时发生.

我相信我知道为什么我得到例外.我的应用程序没有启动该进程,因此我从未有机会将RedirectStandardInput设置为true.

我的目标是能够使用此应用程序将文本发送到python交互式控制台(或其他语言).我仍然希望能够自己输入文本到python提示符,但我也想给我的应用程序控件.

我该怎么做呢?

Lua*_*aan 2

好吧,你说得一中要害。除非您自己启动该过程,否则您不拥有通信流 - 并且实际上没有(合理的)方法可以解决此问题。

如果您默认运行控制台应用程序,它将运行在cmd- 拥有流的人中。如果您希望应用程序“托管”该进程,则您必须是启动该进程的人。你只需要学会打电话myHoster myApp而不是start myApp:)

您可能还需要考虑对 PowerShell 主机进行编码。这将使您能够非常轻松地处理交互式 shell,尽管您必须学习使用 PowerShell 而不是 CMD :) 它非常容易实现,PowerShell 确实具有很强的可扩展性。