解决方案 »

  1.   

    Process 启动的那个可以直接调用 Kill 方法或者你的问题是向命令窗口写入CTRL+C,那么这是标准输入的问题,重定向标准输入可以由代码写入或者你可以模拟键盘的输入,那就不是几行代码的问题了
      

  2.   

    为什么非要在程序里终止它?
    把dos窗口显示出来,用户想终止就直接ctrl+c或者关闭窗口呗而如果是程序自动调用,你应该确保被调用的程序可以自动停止,而不是运行起来没完
      

  3.   


    重定向标准输入如何向流中写入CTRL+C?
      

  4.   


    重定向标准输入如何向流中写入CTRL+C?
    呃,我忘记了 CTRL+C 实际上是一个信号,不是从流输入,
    那么你的目标程序对 CTRL+C 有特殊处理?
    我去看一下是否有好的解决办法,想的太草率了,sorry
      

  5.   

    Process.Start(...) 返回的 Process 对象,可以直接调用它的kill 方法中断。
      

  6.   

    一般情况,kill就可以了。不过kill比较暴力,如果目标命令行程序可以处理ctrl+c信号让自己优雅退出,那么发送信号比较好。发送ctrl+c的通用方法需要4个api:[DllImport("kernel32.dll")]
    static extern bool GenerateConsoleCtrlEvent(int dwCtrlEvent, int dwProcessGroupId);[DllImport("kernel32.dll")]
    static extern bool SetConsoleCtrlHandler(IntPtr handlerRoutine, bool add);[DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);[DllImport("kernel32.dll")]
    static extern bool FreeConsole();// 使用时
    AttachConsole(processId); // 附加到目标进程的console
    SetConsoleCtrlHandler(IntPtr.Zero, true); // 设置自己的ctrl+c处理,防止自己被终止
    GenerateConsoleCtrlEvent(0, 0); // 发送ctrl+c(注意:这是向所有共享该console的进程发送)
    FreeConsole(); // 脱离目标console