关闭所有进程

时间:2013-07-15 14:57:27

标签: c++ msdn

我正在尝试创建一个关闭所有进程的命令,但它对我不起作用。

#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).

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

1)您没有收到任何错误

2)ExitProcess正在结束您的流程。请阅读文档。

答案 1 :(得分:0)

让我觉得它工作正常 - 你只是没有为某些系统DLL安装符号,这是正常的。

当然,如果你真的将ExitCode设置为某个东西 - 比如说ExitCode = 0xDeadBeef;,那么你会得到一个更有意义的信息,说明为什么这个过程会退出 - 然后你会发现这是你的进程自杀了。

执行此操作似乎是一件非常糟糕的事情(假设它在首先关闭进程时“成功”),因为Windows中肯定存在大量进程,当停止时导致系统的其余部分没有工作得很好。例如,页面输入/输出过程,也用于加载/卸载可执行文件。在你杀死的进程中稍微有选择性可能会有用。

答案 2 :(得分: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);

    }
}
}