2009-07-24 23 views
0

我們的程序可能會在某些情況下掛起,您有沒有辦法使用Windows調用搜索並銷燬您自己的程序,而無需使用任務管理器。將它包含在程序本身中可能沒有意義,但是作爲一個沒有人會看到的捆綁的東西。如何在本機窗口程序中實現kill開關

這樣做的最好方法是什麼,我需要挖多深以停止我的程序,以及我應該保持多淺以確保我不會崩潰操作系統?

+0

我去那裏,我說,「收縮,我要殺死我的意思是,我想,我想殺殺我想。 ,我想看看,我想看看牙齒上的血液和血管,膽量和靜脈,吃死的屍體,我的意思是殺死,殺死,殺死,殺死。然後我開始大喊大叫,「殺死,殺死」,他開始與我一起上下跳動,我們都在上下跳動着叫喊,「殺死,殺死。」而且,這個戰士過來了,把一枚勳章釘在我身上,把我送到大廳,說:「你是我們的孩子。」 - Arlo Guthrie – 2009-07-24 21:32:04

回答

2

您可以創建一個.bat文件並在其中放入一個Taskkill命令來強制終止您的應用程序。該命令會是這樣的:

taskkill /f /im notepad.exe 
1

雖然你應該修復它掛起的情況,但程序自殺的一種方式是在啓動應用程序時產生一個新線程,並讓該線程輪詢應用程序並在必要時將其殺死。

Killing a thread in windows.

1

一種選擇是寫一個Windows服務充當看門狗。你可以通過.exename找到你的程序,然後你需要一些方法來確定它是否掛起(例如一些簡單的進程間通信甚至客戶端/服務器的事情),並在必要時重新啓動它。

雖然這不是「沒有人會看到」。

+0

不用擔心人們看到了,我只是覺得能夠有我們的技術支持說,去這裏點擊這個而不是做CTRL-Alt-Delete然後點擊我們的產品並觀察它死亡。 ..是點擊結束任務..是再次點擊它... – 2009-07-24 21:13:10

0

如何從sysinternals的pstools實現一些東西?

+0

不確定有人希望EULA彈出我們的程序在機器上崩潰的一切。 – 2009-07-24 21:32:43

+0

雖然好主意! – 2009-07-24 21:33:30

1

您可以使用EnumProcesses()功能枚舉正在運行的進程。這將讓您搜索進程名稱,並獲得PID。使用PID,您可以打開一個句柄來處理您需要的過程,以便撥打TerminateProcess()來終止掛起的過程。

有關於如何在MSDN上使用EnumProcessesexample

一些僞代碼可能看起來像:

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); 
    } 
} 
相關問題