写入已经运行的进程

时间:2015-06-08 13:13:24

标签: 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]}");
        }
    }
}

我的id有一个进程。这工作得很好 然后我试着向它的stdin发送一些东西。这引发了InvalidOperationException。注意:当我尝试获取StandardInput时发生异常,而不是在我尝试使用WriteLine时发生。

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

嗯,你的头部钉了一下。除非你自己开始这个过程,否则你不拥有通信流 - 而且实际上并没有(合理的)方法。

如果您默认运行控制台应用程序,它将在cmd中运行 - 拥有这些流的人。如果您希望您的申请成为" host"在这个过程中,你必须成为启动它的人。您只需学习拨打myHoster myApp而不是start myApp:)

您可能还想考虑编写PowerShell主机的代码。这将允许您非常轻松地处理交互式shell,尽管您必须学会使用PowerShell而不是CMD :)它非常容易实现,PowerShell实际上非常易于扩展。