创建独立流程!

时间:2011-03-03 05:48:26

标签: c++ winapi createprocess

我正在尝试用C ++中的服务创建一个进程。这个新流程是作为子流程创建的。我想创建一个独立的流程而不是子流程......

我正在使用CreateProcess函数。由于我创建的新进程是一个子进程,当我尝试在服务级别杀死进程树时,它也会杀死子进程...我不希望这种情况发生。我希望创建的新流程独立于服务运行。

请同样的建议.. 感谢..

代码

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);    // Start the child process.
ZeroMemory( &pi, sizeof(pi) );
si.dwFlags = STARTF_USESHOWWINDOW;

if(bRunOnWinLogonDesktop)
{
    if(csDesktopName.empty())
        si.lpDesktop = _T("winsta0\\default");
    else
        _tcscpy(si.lpDesktop, csDesktopName.c_str());
}

if(bHide)
    si.wShowWindow = SW_HIDE;     /* maybe even SW_HIDE */
else
    si.wShowWindow = SW_SHOW;     /* maybe even SW_HIDE */



TCHAR szCmdLine[512];
_tcscpy(szCmdLine, csCmdLine.c_str());

if( !CreateProcess( NULL,
                szCmdLine,
               NULL,
               NULL,
               FALSE,
               CREATE_NEW_PROCESS_GROUP,
               NULL,        
               NULL,        
               &si,        
               &pi ) ) 

2 个答案:

答案 0 :(得分:4)

在关闭子进程的线程和进程处理程序之后,它仍然是Process Explorer中的子进程,但是结束父进程不会导致子进程终止。

CreateProcess( NULL,
            szCmdLine,
           NULL,
           NULL,
           FALSE,
           CREATE_NEW_PROCESS_GROUP,
           NULL,        
           NULL,        
           &si,        
           &pi ); 
if(pi.hThread)
    CloseHandle(pi.hTread);
if(pi.hProcess)
    CloseHandle(pi.hProcess);

我在执行'start'命令的过程中,在sources of cmd.exeReactOS中找到了这个决定。

答案 1 :(得分:3)

创建一个中间过程(使用create_new_process_group),然后创建真实过程。

Service
  -> Intermediate Process
     -> Real Process

中间过程应该在启动真实过程后立即退出。