我目前使用Process
从WPF应用程序启动一堆Java进程,通常这些进程将在自己的窗口中运行。但是,当我想从WPF应用程序向Java应用程序发送命令时,它要求我使用
StartInfo.UseShellExecute = false;
导致进程在没有控制台的情况下运行。
我尝试在SO(How to open/close console window dynamically from a wpf application?)和其他几个目录中寻找答案,但大多数似乎是为了让该应用程序以控制台模式或UI模式运行。无需将控制台附加到System.Diagnostics.Process
此版本将打开控制台
namespace MMSG.Instances
{
public abstract class JavaServer : Process
{
protected JavaServer(string workingDir)
{
StartInfo.FileName = "java";
StartInfo.UseShellExecute = true;
StartInfo.RedirectStandardInput = true;
StartInfo.WorkingDirectory = workingDir;
StartInfo.CreateNoWindow = false;
StartInfo.ErrorDialog = true;
EnableRaisingEvents = true;
}
protected JavaServer(string ram, string workingDir, string jarLocation) : this(workingDir)
{
StartInfo.Arguments = $"-Xms{ram} -Xmx{ram} -jar \"{jarLocation}\"";
}
}
}
但是尝试使用Process
将输入发送到javaServer.StandardInput.WriteLine("stop");
时
我收到此错误:System.InvalidOperationException: The Process object must have the UseShellExecute property set to false in order to redirect IO streams.
并且如前所述,将其设置为false会完全删除“控制台”窗口。
预期结果:允许在仍具有控制台窗口的同时向该进程发送命令。 实际结果:没有命令或没有控制台