C# 从C向进程发送CTRL\u C/SIGINT#
我想中断通过cmd.exe运行的命令。在下面的代码中,我使用ping www.stackoverflow.com-t作为示例C# 从C向进程发送CTRL\u C/SIGINT#,c#,console,pinvoke,C#,Console,Pinvoke,我想中断通过cmd.exe运行的命令。在下面的代码中,我使用ping www.stackoverflow.com-t作为示例 public void Run() { System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("cmd.exe"); si.RedirectStandardInput = true; si.Redir
public void Run()
{
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("cmd.exe");
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
si.RedirectStandardError = true;
si.UseShellExecute = false;
si.CreateNoWindow = false;
//si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process console = new Process();
console.StartInfo = si;
console.EnableRaisingEvents = true;
console.OutputDataReceived += proc_OutputDataReceived;
console.ErrorDataReceived += proc_ErrorDataReceived;
console.Start();
console.BeginOutputReadLine();
console.BeginErrorReadLine();
console.StandardInput.WriteLine("ping www.stackoverflow.com -t");
Thread.Sleep(4000);
bool success = GenerateConsoleCtrlEvent((uint)0, (uint)console.SessionId);
if (!success)
{
MessageBox.Show("Error Code: " + Marshal.GetLastWin32Error().ToString());
}
char asdf = (char)0x3;
console.StandardInput.WriteLine('\x3');
console.StandardInput.WriteLine(asdf);
console.StandardInput.Write(asdf);
//console.StandardInput.Close();
console.StandardInput.WriteLine(@"exit");
console.WaitForExit();
}
GenerateConsoleElevent中的错误代码为6
我已按照以下指示行事:
然而,我无法中断这个过程
非常感谢您的帮助,向应用程序发送密钥和其他消息时,这可能是一个非常常见的问题。请记住,如果要发送到的应用程序的权限评估高于您的程序,则它通常无法成功发送密钥或消息。尝试以管理权限运行您的程序。或者,如果您正在通过Visual Studio进行调试,请以管理权限运行Visual Studio 编辑: 鉴于这不是您的问题,您想看看如何使用
ServiceController
类。它允许比过程
更精细的控制,并且强烈建议在这些情况下使用它以提高可靠性。我会留下我以前的答案,因为这是一个其他人可能会觉得有用的常见问题
以下是两个入门教程:
希望这对你有帮助 谢谢,但这不是我的问题。刚刚确认,以administratorI的身份运行VisualStudio确实希望能够发送组合键,这样我就有了灵活性。这似乎是可能的,但我只是做错了什么。