2013-07-15 35 views
0

我試圖做出一個關閉所有進程的命令,但它不適用於我。關閉所有進程

#include "StdAfx.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    // Get the list of process identifiers. 
    DWORD ExitCode; 
    DWORD aProcesses[1024], cbNeeded, cProcesses; 
    unsigned int i; 

    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) 
    { 
     return 1; 
    } 

    // Calculate how many process identifiers were returned. 
    cProcesses = cbNeeded/sizeof(DWORD); 

    // exit each process. 

    for (i = 0; i < cProcesses; i++) 
    { 
     std::cout<<"end"; 
     if(aProcesses[i] != 0) 
     { 
      GetExitCodeProcess(OpenProcess(PROCESS_ALL_ACCESS,false,aProcesses[i]),&ExitCode); 
      ExitProcess(ExitCode); 
     } 
    } 

} 

此外,我得到這些錯誤:

> 'check2.exe': Loaded 'C:\Users\Barak Shriky\Documents\Visual Studio 2010\Projects\check2\Debug\check2.exe', Symbols loaded. 
'check2.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Symbols loaded (source information stripped). 
'check2.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Symbols loaded (source information stripped). 
'check2.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Symbols loaded (source information stripped). 
'check2.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded (source information stripped). 
'check2.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded (source information stripped). 
'check2.exe': Loaded 'C:\Windows\SysWOW64\psapi.dll', Symbols loaded (source information stripped). 
The program '[3292] check2.exe: Native' has exited with code -858993460 (0xcccccccc). 

有人可以幫我這個問題?

+1

您可能要查找'TerminateProcess'。但是,請注意,Windows需要一些進程才能運行,因此您的代碼將不可避免地導致重新啓動。如果這就是你想要的,'ExitWindowsEx'可能是一個更簡單的方法。 –

+1

爲什麼要結束所有進程,包括結束所有進程的進程?這不是明智的。 – doctorlove

回答

0

在我看來,它的工作很好 - 你只是沒有爲某些系統DLL安裝符號,這是正常的。

當然,你會明白爲什麼的過程中退出,如果你確實設置ExitCode的東西更有意義的消息 - 說ExitCode = 0xDeadBeef; - 然後你會看到,這是你的進程殺死自己。

這樣做似乎是一件非常糟糕的事情(假設它首先關閉進程「成功」),因爲在Windows中當然有很多進程在停止時導致系統的其餘部分不工作得很好。例如,頁面導入/導出過程,例如,也用於加載/卸載可執行文件。對於你殺死的進程稍微有選擇性可能會有用。

+0

簡單看一下'ExitProcess'的文檔以及一個快速調試會話就會發現這個問題:) –

+0

@ Moo-Juice:當然。 –

4

1)你沒有得到任何錯誤

2)ExitProcess已經結束過程。請閱讀文檔。

+0

我明白了,那麼我該如何預防呢? –

+0

@BarakShriky,不要調用'ExitProcess'? –

0

見下面我曾經終止進程的代碼...

// exit each process. 

for (i = 0; i < cProcesses; i++) 
{ 
    std::cout<<"end"; 
    if(aProcesses[i] != 0) 
    { 
     GetExitCodeProcess(OpenProcess(PROCESS_ALL_ACCESS,false,aProcesses[i]),&ExitCode); 
     TerminateProcess(aProcesses[i], ExitCode); 

    } 
} 
}