Как начать процесс и сделать его «независимым»,

Предполагая, что у меня есть эти два факта:

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 независимыми. Я надеюсь, это поможет вам.