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

时间:2009-07-24 21:08:57

标签: windows kill

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

这样做的最佳方式是什么,我需要多深入一点来停止我的程序?我应该保持多么浅薄以确保我不会崩溃操作系统?

6 个答案:

答案 0 :(得分:2)

您可以创建.bat文件并在其中放置Taskkill命令以强制终止您的应用程序。该命令看起来像这样:

taskkill /f /im notepad.exe

答案 1 :(得分:1)

虽然你可能应该修复它挂起的情况,但是你可以让程序自行杀死的一种方法是在你启动应用程序时产生一个新线程,并让该线程轮询应用程序并在必要时终止它。 / p>

Killing a thread in windows.

答案 2 :(得分:1)

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

但这并不是“没人会看到”。

答案 3 :(得分:1)

您可以使用TerminateProcess终止流程。您需要使用EnumProcesses确定目标进程ID,然后调用OpenProcess以获取进程的句柄以终止它。

答案 4 :(得分:1)

您可以使用EnumProcesses()函数枚举正在运行的进程。这将允许您搜索进程名称,并获取PID。使用PID,您可以打开一个HANDLE到您需要的进程,以便调用TerminateProcess()来终止挂起的进程。

如何在MSDN上使用EnumProcesses example

某些伪代码可能类似于:

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

答案 5 :(得分:0)

如何从sysinternals的pstools实现一些东西?