Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C向进程发送CTRL\u C/SIGINT#_C#_Console_Pinvoke - Fatal编程技术网

C# 从C向进程发送CTRL\u C/SIGINT#

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

我想中断通过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();
    }
GenerateConsoleElevent中的错误代码为6

我已按照以下指示行事:

  • 然而,我无法中断这个过程


    非常感谢您的帮助,

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

    编辑:

    鉴于这不是您的问题,您想看看如何使用
    ServiceController
    类。它允许比
    过程
    更精细的控制,并且强烈建议在这些情况下使用它以提高可靠性。我会留下我以前的答案,因为这是一个其他人可能会觉得有用的常见问题

    以下是两个入门教程:


    希望这对你有帮助

    谢谢,但这不是我的问题。刚刚确认,以administratorI的身份运行VisualStudio确实希望能够发送组合键,这样我就有了灵活性。这似乎是可能的,但我只是做错了什么。