Ответы пользователя по тегу Windows
  • Как запускать и контролировать статус работы сторонних exe файлов в c++?

    @FaTTeST
    Для запуска внешней программы из кода на C++ можно использовать функцию system(). Эта функция позволяет выполнить команду в командной строке. Например, чтобы запустить программу installer.exe, можно использовать следующий код:

    #include <stdlib.h>
    
    int main()
    {
        system("installer.exe");
        return 0;
    }


    Функция system() блокирует выполнение программы, пока запущенный процесс не завершится. Если вам нужно запустить процесс асинхронно, то можно использовать функцию CreateProcess() из библиотеки Windows API.

    Чтобы определить, что внешняя программа завершила работу, можно использовать функцию WaitForSingleObject(). Эта функция блокирует выполнение программы до тех пор, пока указанный объект не перейдет в сигнальное состояние. В случае с внешней программой, этим объектом будет процесс, который она запустила. Например, чтобы дождаться завершения программы installer.exe, можно использовать следующий код:

    #include <windows.h>
    
    int main()
    {
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        ZeroMemory(&pi, sizeof(pi));
    
        // Запускаем процесс
        CreateProcess("installer.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    
        // Ожидаем завершения процесса
        WaitForSingleObject(pi.hProcess, INFINITE);
    
        // Закрываем дескрипторы процесса и потока
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    
        return 0;
    }


    В этом коде мы используем функции CreateProcess() и WaitForSingleObject() для запуска процесса и ожидания его завершения. Функция CreateProcess() создает новый процесс и возвращает дескрипторы процесса и потока. Функция WaitForSingleObject() ожидает завершения процесса, используя дескриптор процесса, который мы передали ей в качестве параметра. После завершения процесса мы закрываем его дескриптор и дескриптор потока с помощью функции CloseHandle().
    Ответ написан
    Комментировать