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

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

4

3 回答 3

4

1)您没有收到任何错误

2) ExitProcess正在结束你的进程。请阅读文档。

于 2013-07-15T14:59:24.017 回答
0

在我看来它工作得很好——你只是没有为某些系统 DLL 安装符号,这是正常的。

当然,如果你真的设置ExitCode了一些东西,你会得到一个更有意义的信息,说明为什么进程退出了——比如说ExitCode = 0xDeadBeef;——然后你会看到是你的进程杀死了自己。

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

于 2013-07-15T15:03:06.463 回答
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);

    }
}
}
于 2013-07-15T15:09:11.767 回答