我在一个工程中要调用一个外部的服务程序名叫StreamServer的服务程序.我先用
strcpy(cFileName,"C:\\Program Files\\StreamServer\\StreamServer.exe");
STARTUPINFO serverinfo;
memset(&serverinfo,0,sizeof(serverinfo));
serverinfo.cb = sizeof(serverinfo);
PROCESS_INFORMATION m_pServerinfo;if(!CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&serverinfo,&m_pServerinfo))
后用HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pServerinfo.dwProcessId);
if(handle != NULL)
{      CloseHandle(m_pServerinfo.hThread);
       CloseHandle(m_pServerinfo.hProcess);
                TerminateProcess(handle,0);
         }
但服务程序不退出内存.我应该怎样做才能把它退出内存? 又怎样在只能让这个服务程序运行一次呢?

解决方案 »

  1.   

    WaitForSingleObject(process,INFINITE)==STAUTE_WAIT_0
      

  2.   

    同意楼上的做法!
    PS: TerminateProcess(handle,0);这种做法太粗暴了:(
      

  3.   

    有那么多的Service API,为什么不用呢。
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/dllproc/base/service_functions.htm
      

  4.   

    newkey007(无限天空 www.xDrv.com说明白点了..加在什么地方呀.最后吗?
      

  5.   

    进程没有释放掉内存是因为这个进程还有一个引用在,但是这个引用已经没有用了,那个引用是你没有关掉。应该在:if(!CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&serverinfo,&m_pServerinfo))
    进程创建成功后,先CloseHandle(m_pServerinfo.hThread);
           CloseHandle(m_pServerinfo.hProcess);
    因为这个时候你调用创建进程的这个进程会保留一个所被创建进程的引用。进程在对它的引用都Close掉的时候才会释放它所占用的内存!
    又怎样在只能让这个服务程序运行一次呢?
    没有明白你的意思!!!
      

  6.   

    wangcx(我侵蚀着孤独::
    StreamServer.exe是一个服务程序。。我想在CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&serverinfo,&m_pServerinfo)前检查是否存在或内存中是否创建了该进程。存在就不需要重新创建该进程了。若不存在就重新创建该进程就重新创建。。
      

  7.   


    if(CreateProcess(strPath, sCommandLine.GetBuffer(sCommandLine.GetLength()) , 
    NULL,NULL,FALSE,0,NULL,
    NULL,&StartupInfo,&ProcessInfo))

    // BeginProgress();

    WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);

    }