Предполагая, что у меня есть эти два факта:
CreateProcess()
запускает процесс и позволяет вашей программе продолжать работу во время ее запуска, но когда ваша программа заканчивается, дочерний процесс переходит к ней. Кроме того, ваша программа должна учитывать, когда дочерний процесс завершается, чтобы он мог правильно освободить дескриптор процесса.
system()
запускает процесс, ждет его завершения и продолжает свою программу.
Так, пожалуйста, на самом деле можно это сделать?
CreateProcess()
не CreateProcess()
завершения дочернего процесса по умолчанию, он немедленно возвращается. Используйте WaitForSingleObject
если вы хотите подождать. Нет, дочерний процесс не будет автоматически отключен при выходе родителя, и дескриптор автоматически освобождается операционной системой, поэтому не нужно делать это самостоятельно (если вы используете современную версию Windows).
Как и любой ресурс ОС (объекты gdi, объекты пользователя, объекты ядра), если вы не уничтожаете / не выпускаете / не закрываете ресурс самостоятельно, тогда у вас будет утечка ресурсов во время запуска вашего приложения. Вы должны закрыть обе руки, возвращенные из CreateProcess
вскоре после возврата CreateProcess
.
Вы можете указать «DETACHED_PROCESS» в CreationFlags. Как следующий код snippent:
if (CreateProcessW(NULL, (LPWSTR) L"File.exe ", 0, 0, false,CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW | DETACHED_PROCESS , 0, 0, &siStartupInfo, &piProcessInfo) != false) { /* Watch the process. */ dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (2 * 1000)); } else { /* CreateProcess failed */ iReturnVal = GetLastError(); }
Это сделает процессы yur независимыми. Я надеюсь, это поможет вам.