c#是否可以使用操作系统外壳写入进程?

c#是否可以使用操作系统外壳写入进程?,c#,shell,C#,Shell,在C#中,可以使用ProcessStartInfo类创建新流程。此类的属性UseShellExecute必须设置为false才能重定向标准输入和标准输出 如果此属性设置为true,则操作系统外壳将启动该进程 这很方便,因为标准输出已经按照我的要求通过管道传输到屏幕。因此,我很好奇是否可以使用任何其他方法直接写入进程。如果shell正在处理到屏幕的输出,我是否可以让shell接受我想要的输入命令 我知道我可以自己重定向标准输出和标准输入,但鉴于shell已经很好地处理了输出,我一直想知道是否有更简

在C#中,可以使用ProcessStartInfo类创建新流程。此类的属性UseShellExecute必须设置为false才能重定向标准输入和标准输出

如果此属性设置为true,则操作系统外壳将启动该进程

这很方便,因为标准输出已经按照我的要求通过管道传输到屏幕。因此,我很好奇是否可以使用任何其他方法直接写入进程。如果shell正在处理到屏幕的输出,我是否可以让shell接受我想要的输入命令


我知道我可以自己重定向标准输出和标准输入,但鉴于shell已经很好地处理了输出,我一直想知道是否有更简单的方法。

听起来您希望能够写入进程,同时也允许shell写入进程

这会给订购带来很多问题,因此是不允许的

但是,您可以将
UseShellExecute
设置为
true
,但将
RedirectStandardOutput
设置为
false
,以避免处理程序的输出。您需要将
RedirectStandardInput
设置为
true
,然后处理将程序输入到程序中的管道


记住,通过手动执行管道,所有同步问题都会消失,因为您有机会控制数据何时通过。在运行程序的最简单情况下,输入一点数据,然后让用户控制。例如,您可以确保用户不会意外地妨碍您的自动化。

我认为根据“重定向标准输入”的文档对于UseShellExecute=true的进程,我无法写入标准输入,否则写入将引发异常。我想这意味着我不应该那样做。不管怎样,我想你已经回答了我的问题。似乎我必须将UseShellExecute设置为false,然后自己手动执行所有操作。我已经有3个其他的线程,我真的不想有一个线程我自己的只是做一些写和读,但我想如果我必须,我必须。