2

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

2 に答える 2

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

この決定は、ReactOSの cmd.exe のソースで、「開始」コマンドを実行する手順で見つけました。

于 2012-03-07T17:25:03.237 に答える
3

中間プロセスを作成 (create_new_process_group を使用) すると、実際のプロセスが作成されます。

Service
  -> Intermediate Process
     -> Real Process

中間プロセスは、実際のプロセスを起動するとすぐに終了する必要があります。

于 2011-03-03T15:19:03.117 に答える