2015-01-25 4 views
-2

Я пытаюсь создать программу, в которой он запускает другой .exe и сам закрывается после запуска другой программы.C++ Начните еще одну программу и выйдите

настоящее время у меня следующий код:

#include <cstdlib> 

int main() 
{ 
    std::system("checkpoint.exe"); 
} 

я могу получить checkpoint.exe, чтобы начать, но сама программа стартер не закрывается до checkpoint.exe закрывается. Как мне обойти это?

+3

вам нужно начать отдельный процесс, который не блокирует выполнение вашей программы, см. этот [вопрос] (http://stackoverflow.com/questions/1067789/how-to-create-a-process-in-c-on-windows) – sled

+0

Некоторые системы поддерживают процесс иерархия. Каждый процесс (кроме первого) является дочерним процессом. Вы пытаетесь уничтожить такую ​​иерархию. Некоторые системы имеют возможность создавать отдельные процессы. Вероятно, тогда вам придется использовать специальный вызов операционной системы для создания такого процесса. – user3344003

+1

@Axalo: похоже, что он использует окна, поэтому нет вилки:/ – sled

ответ

4

Так как вы по всей видимости, с помощью Windows, вы можете использовать CreateProcess

LPSTARTUPINFO lpStartupInfo; 
LPPROCESS_INFORMATION lpProcessInfo; 

memset(&lpStartupInfo, 0, sizeof(lpStartupInfo)); 
memset(&lpProcessInfo, 0, sizeof(lpProcessInfo)); 

CreateProcess("checkpoint.exe" 
       NULL, NULL, NULL, 
       NULL, NULL, NULL, NULL, 
       lpStartupInfo, 
       lpProcessInfo 
      ) 
+2

У MSDN также есть хорошая [документация] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684863%28v= vs.85% 29.aspx) о различных флагах создания процесса :) – sled

+0

Благодарим за обмен фактическим кодом: b – dk123

1

Предыдущий ответ имеет некоторые ошибки, так вот рабочий раствор:

#include <cstdlib> 
#include <Windows.h> 

int main() 
{  
    STARTUPINFO lpStartupInfo; 
    PROCESS_INFORMATION lpProcessInfo; 

    ZeroMemory(&lpStartupInfo, sizeof(lpStartupInfo)); 
    lpStartupInfo.cb = sizeof(lpStartupInfo); 
    ZeroMemory(&lpProcessInfo, sizeof(lpProcessInfo)); 

    CreateProcess("Program.exe", 
        NULL, NULL, NULL, 
        NULL, NULL, NULL, NULL, 
        &lpStartupInfo, 
        &lpProcessInfo 
        ); 

    return 0; 
} 
+0

Какие ошибки вы говорите? Не могли бы вы описать их в своем ответе? –

Смежные вопросы