从c#发送CTRL_C/SIGINT到进程

本文关键字:SIGINT 进程 发送 CTRL | 更新日期: 2023-09-27 18:01:49

我想中断通过cmd.exe运行的命令。在下面的代码中,我使用ping www.stackoverflow.com -t作为示例。

    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();
    }

来自GenerateConsoleCtrlEvent的错误码为6。

我已遵照下列指示:

  1. 我可以发送ctrl-C (SIGINT)到Windows上的应用程序吗?

  2. http://pastebin.com/vQuWQD8F
  3. 如何发送密钥而不是字符到进程?

但是,我无法中断这个进程。

任何帮助都非常感谢,

从c#发送CTRL_C/SIGINT到进程

在向应用程序发送密钥和其他消息时,这可能是一个非常常见的问题。请记住,如果要发送到的应用程序具有比您的程序更高的权限评估,则它通常不会成功发送密钥或消息。尝试在管理权限下运行程序。或者,如果通过Visual Studio进行调试,请在管理员权限下运行Visual Studio。

编辑:

看到这不是你的问题,你想看看使用这里记录的ServiceController类。它允许比Process更好的控制,并且强烈建议在这些情况下使用它来提高可靠性。我将保留我之前的答案,因为这是一个常见的问题,其他人可能会觉得有用。

这里有两个教程让你开始:

http://www.codeproject.com/Articles/31688/Using-the-ServiceController-in-C-to-stop-and-starthttp://www.c-sharpcorner.com/uploadfile/mahesh/servicecontroller-in-C-Sharp/

希望这对你有帮助!