代码之家  ›  专栏  ›  技术社区  ›  Peter Turner

如何在本机windows程序中实现kill开关

  •  0
  • Peter Turner  · 技术社区  · 16 年前

    我们的程序在某些情况下可能会出现问题,是否有一种方法可以在不使用任务管理器的情况下使用windows调用搜索和销毁您自己的程序。将其包含在程序本身中可能没有意义,但作为一个捆绑的东西,没有人会看到。

    做这件事最好的方法是什么,我需要挖掘多深才能停止我的程序,我应该保持多浅才能确保我不会使操作系统崩溃?

    6 回复  |  直到 16 年前
        1
  •  2
  •   Roger Stewart    16 年前

    您可以创建一个.bat文件并放置一个 Taskkill 命令强制终止您的应用程序。该命令将如下所示:

    taskkill /f /im notepad.exe
    
        2
  •  1
  •   Andy Chase    16 年前

    尽管您可能应该修复程序挂起的情况,但让程序自行终止的一种方法是在启动应用程序时生成一个新线程,并让该线程轮询应用程序,并在必要时终止它。

    Killing a thread in windows.

        3
  •  1
  •   Michael Stum    16 年前

    一种选择是编写一个充当看门狗的Windows服务。您可以通过.exename找到您的程序,然后需要某种方法来确定它是否挂起(例如一些简单的进程间通信,甚至是客户端/服务器事件),并在必要时重新启动它。

        4
  •  1
  •   mattnewport    16 年前

    您可以使用终止进程 TerminateProcess . 您需要使用 EnumProcesses 然后打电话 OpenProcess 获取进程句柄以终止它。

        5
  •  1
  •   mrduclaw    16 年前

    EnumProcesses() TerminateProcess() 终止挂起的进程。

    有一个 example EnumProcesses 在MSDN上。

    某些伪代码可能类似于:

    EnumProcesses(pidArray, sizeofArray, &bytesReturned);
    for(int i=0; i < bytesReturned/sizeof(DWORD); i++) {
      if(getProcessName(pidArray[i]) == "ourProcess"){
        HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pidArray[i]);
        TerminateProcess(hProc, 0);
      }
    }
    
        6
  •  0
  •   jhw    16 年前

    从sysinternals的pstools中实现一些东西怎么样?