我正在控制一个像这样启动的控制台进程:
AvrGdb = new Process();
AvrGdb.StartInfo.CreateNoWindow = true;
AvrGdb.StartInfo.UseShellExecute = false;
AvrGdb.StartInfo.FileName = "avr-gdb.exe";
AvrGdb.StartInfo.RedirectStandardOutput = true;
AvrGdb.StartInfo.RedirectStandardInput = true;
AvrGdb.StartInfo.RedirectStandardError = true;
我将短命令字符串发送到'命令行'并接收数据。但是,需要发送的命令之一是 CTRL + C 。这不会关闭进程,它会将其发送到单独的微控制器中控制调试器(该过程是avr micros的' avr-gdb'调试器)。
我已经尝试StandardInput.Write('\x3')
和StandardInput.Write(char.ConvertFromUtf32(3));
都没有成功(即我写的过程没有反应)。
存在关于此主题的许多其他主题,但通常提问者实际上想要使用此命令结束该过程,因此建议采用其他方法。
我发现有一个回复有这个建议,我认为可能有用(使用导入的C ++' GenerateConsoleCtrlEvent()'):
Process avrgdb = Process.GetProcessesByName("avr-gdb")[0];
GenerateConsoleCtrlEvent(CTRL_C_EVENT, (uint)avrgdb.SessionId);
但它并没有 - 显然是会议纪要'需要是一个' processGroup' c#中无法访问(或不存在?),只能在C ++中访问。
如果我知道用C ++而不是C#重写我的整个过程交互会解决这个问题,那么我可能会尝试这样做,但这种方法涉及一个很大的学习曲线。还有其他想法吗?
答案 0 :(得分:0)
我想我找到了一个解决方案(通过this post);有人编写了一个C ++应用程序“SendSignal”。这通常发送CTRL + Break但我修改了源并重新编译以发送CTRL + C.
启动第三个进程以从第一个进程控制第二个进程看起来很麻烦,但它确实有效。