我控制它已經開始這樣的控制檯進程:發送CTRL-C的過程 - 而不是結束它
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);
但它沒有 - 顯然是「SESSIONID」需求是一個'processGroup',它不能在c#中訪問(或不存在?),只能在C++中使用。
如果我知道改寫C++而不是C#將解決這個我整個過程交互,那麼我可能會嘗試這樣做,但一個大的學習曲線參與了該辦法。請任何其他想法?
爲什麼downvote,請?我能改善我的問題嗎?如果是這樣,如何 - 有用的反饋讚賞。 – quilkin