我要在你个com中调用另一个.exe文件使其只能启动并运行一次.当点击退出按钮后.终止.exe文件并是其退出内存..
启动按钮下的代码:
char cFileName[128];
strcpy(cFileName,"C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe -remote -nosplash");

STARTUPINFO info; memset(&info,0,sizeof(info));
        info.cb = sizeof(info);   
   HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
  //m_pinfo在头文件中定义了..
if(hProcess == NULL)
{

if(!CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&info,&m_pinfo))
{
AfxMessageBox("Can't start task!");
}
}但我在终止按钮下的代码:
       HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
if(hProcess != NULL)
{

     TerminateProcess(hProcess,0);
         hProcess=NULL;        }
       为什么在内存中还驻留C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe
请指点!

解决方案 »

  1.   

    请问怎样清除.exe在内存驻留的空间..
      

  2.   

    好像是要等一会,
    HANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, processentry.th32ProcessID);
    ::TerminateProcess(hProc, 0);
    ::WaitForSingleObject(hProc, 5000);
    等一下 试试看
      

  3.   

    //////////////////////CreateProcess()/////////////////////////////////
    CString str;
    STARTUPINFO si;
    PROCESS_INFORMATION pi; // 调用的应用程序名
    str = "Ping";    //"Ping.exe" // zero out and initialize STARTUPINFO
    memset( &si, 0, sizeof( si ) );
    si.cb = sizeof( si );
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;
    if(CreateProcess(
    NULL, // can be name of process unless
    // batch file, else must be
    // in command line:
    (char*)LPCSTR(str), // command line
    NULL,NULL, // security options
    FALSE, // if true will inherit all
    // inheritable handles
    // from this process
    NORMAL_PRIORITY_CLASS, // can also be HIGH_PRIORITY_CLASS
    // or IDLE_PRIORITY_CLASS
    NULL, // inherit this process's
    // environment block
    NULL, // specifies working directory
    // of created process
    &si, // STA RTUPINFO specified above
    &pi // PROCESS_INFORMATION returned
    )
    )
    {
    // HANDLE pH = pi.hProcess;
    // // wait until application is ready for input
    // if ( !WaitForInputIdle( pH,1000 ) )
    // {
    // // send messages, etc.
    // }
    // kill process with 0 exit code
    // TerminateProcess( pH, 0 );
      }
    else
    {
    AfxMessageBox( "Ping.exe 文件当前目录不存在!" );
    }
      

  4.   

    你得到TerminateProcess(hProcess,0);的返回值看以下是什么错误
      

  5.   

    肯定是程序退出的时候死在哪里了,TRACE些东西看吧,或者用VC以DEBUG运行,退出,接着按"Break",再检查stack list
      

  6.   

    这个进程是不是服务???
    如果是服务好像不行。
    但进程terminateProcess,应该可以杀死得。并且
     HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
    if(hProcess != NULL)
    {

         TerminateProcess(hProcess,0);
             hProcess=NULL;        }m_pinfo.dwProcessId这个时哪儿来得?
    事不是已经变化了阿那个EXE结束了ma ?还是exe结束了,存在进程?
      

  7.   

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
    这儿很容易出错,并不是对自己的子进程可以获得全部权限的。你应该先提升父进程的debug权限。
      

  8.   

    可能是主线程先退出了,在TerminateProcess(hProcess,0)后面等待一会儿。Sleep()或者WaitForSingleObject()