首页
社区
课程
招聘
关于带有DEBUG_ONLY_THIS_PROCESS标志进程的问题
发表于: 2005-9-6 16:14 7613

关于带有DEBUG_ONLY_THIS_PROCESS标志进程的问题

2005-9-6 16:14
7613
就这个问题已经郁闷了好些日子
写个小程序作试验 :

#include <windows.h>

int main()
{
        char szFileName[256] ="C:\\windows\\notepad.exe" ;

        STARTUPINFO                                stStartUp;
        PROCESS_INFORMATION                stProcInfo;
        GetStartupInfo ( &stStartUp ) ;

        if( CreateProcess(szFileName,NULL,NULL,NULL,FALSE, \
                DEBUG_ONLY_THIS_PROCESS|CREATE_SUSPENDED,NULL,NULL,&stStartUp,&stProcInfo) )
        {
                ResumeThread ( stProcInfo.hThread ) ;
                TerminateProcess ( stProcInfo.hProcess, 0 ) ;
                Sleep ( 100000 ) ;
        }
        return 0 ;
}

直接执行后,因为有Sleep,主程序还在,但不知为什么目标进程notepad.exe经过TerminateProcess还是存在(可以在任务管理器中看到)。

但若去掉DEBUG_ONLY_THIS_PROCESS标志时该进程就不存在了

对比之下,疑惑不解???

现在就以带有DEBUG_ONLY_THIS_PROCESS标志来说,在主程序继续运行的条件下,如何结束目标进程?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因?你是在DEBUG子程式,所以只要母程式?在,子程式就不?剿止.??用DebugActiveProcessStop然後才用TerminateProcess看看是否可行.
2005-9-6 16:27
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
试了下,这个函数在VC6.0中无法使用,网上的资料也很少
就连6.0的MSDN里也没有

多些楼上的提醒:“子程式”,“母程式”

我的问题可以用开辟独立线程来解决,而且不用TerminateProcess:

#include <windows.h>

DWORD WINAPI NewThread ( LPVOID lpParameter )
{
        char szFileName[256] ="C:\\windows\\notepad.exe" ;

        STARTUPINFO                                stStartUp;
        PROCESS_INFORMATION                stProcInfo;
        GetStartupInfo ( &stStartUp ) ;

        if( CreateProcess(szFileName,NULL,NULL,NULL,FALSE, \
                DEBUG_ONLY_THIS_PROCESS|CREATE_SUSPENDED,NULL,NULL,&stStartUp,&stProcInfo) )
        {
                ResumeThread ( stProcInfo.hThread ) ;
        }
        return 0 ;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        DWORD pThreadId = 0 ;
        CreateThread ( NULL,0,NewThread,NULL,NULL,&pThreadId ) ;
       
        Sleep ( 100000 ) ;
        return 0;
}
2005-9-6 18:36
0
游客
登录 | 注册 方可回帖
返回
//