2

我想中断通过 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. 我可以向 Windows 上的应用程序发送 ctrl-C (SIGINT) 吗?

  2. http://pastebin.com/vQuWQD8F

  3. 如何将密钥而不是字符发送到进程?

但是,我无法中断该过程。

非常感谢任何帮助,

4

1 回答 1

0

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

编辑:

看到这不是您的问题,您想看看使用此处ServiceController记录的类。它允许比它更精细的控制,并且强烈建议在这些情况下保持可靠性。我会留下我以前的答案,只是因为它是一个常见问题,其他人可能会觉得有帮助Process

这里有两个教程可以帮助您入门:

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

希望这对你有帮助!

于 2013-03-03T00:15:32.833 回答