2013-07-15 2 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); 

    } 
} 
} 
Смежные вопросы