0 / 0 / 0
Регистрация: 06.03.2018
Сообщений: 30
1

Получение кода завершения процесса

20.12.2018, 16:23. Показов 2045. Ответов 1
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане, начал работать с WinAPI, написал такую небольшую программу.
Хотелось бы прояснить несколько деталей:
1) Правильно ли я завершаю процесс? или функции удаления дискрипторов нити и процесса не удаляют процесс полностью?
2) Правильно ли я получаю код окончания процесса?
Заранее спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <Windows.h>
#include <iostream>
 
int main() {
    setlocale(LC_ALL, "Rus");
    STARTUPINFO si; // Определяет местоположение окна, рабочий стол, стандартные дескрипторы и внешний вид главного окна для процесса во время создания
    PROCESS_INFORMATION pi; // Содержит информацию о процессе и его первичном потоке
    DWORD exitCode;  // код завершения DWORD = usigned long
    ZeroMemory(&si, sizeof(si));    // обнуления памяти в структуре, чтобы она не содержала мусор (так как мы почти ничто не инициализируем)
    si.cb = sizeof(si);
    TCHAR name[] = TEXT("cmd /c HelloWorld.exe"); // TCHAR, TEXT универсализируют строки
    char prog[] = "D:\\MyProjects\\2 курс\\HelloWorld\\Debug\\HelloWorld.exe";
    bool f = CreateProcess(prog, name, NULL, NULL, FALSE,
        0, NULL, NULL, &si, &pi); // пытаемся создать процесс
    if (f)
    {
        std::cout << "Процесс был создан\n";
        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle(pi.hThread); // закрываем дискерипторы первичного потока порожденного процесса
        if (GetExitCodeProcess(pi.hProcess, &exitCode) == true) // получаем код завершения процесса
        {
            std::cout << "Процесс завершился с кодом: " << exitCode << std::endl;
            CloseHandle(pi.hProcess); // закрываем дискрипторы порожденного процесса
        }
        else return 1;
    }
    else {
        int error = GetLastError();
        std::cout << "Создание нового процесса завершилось с ошибкой: " + error<< std::endl;
        system("pause");
        return 1;
    }
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2018, 16:23
Ответы с готовыми решениями:

Ожидание завершения дочернего процесса
Привет всем. Задание работы заключается в написании двух программ: главной и дочерней. Главная...

Ожидание завершения процесса установки
Привет. Я новичек в изучении программирования и сейчас занимаюсь написанием небольшой программы с...

Получить код завершения дочернего процесса
Можно ли в материнском процессе получить с каким кодом завершился дочерний процесс? Добавлено...

Использование функции SetTimer для завершения процесса
Прошу помощи в использовании данной функции. Нужно применить ее так, чтобы она закрывала процесс...

1
1385 / 1016 / 322
Регистрация: 28.07.2012
Сообщений: 2,804
22.12.2018, 13:39 2
Цитата Сообщение от PariahMe Посмотреть сообщение
Правильно ли я завершаю процесс?
К моменту срабатывания WaitForSingleObject процесс уже завершен.

Цитата Сообщение от PariahMe Посмотреть сообщение
Правильно ли я получаю код окончания процесса?
Да
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2018, 13:39
Помогаю со студенческими работами здесь

Защита от завершения одного процесса без другого
Добрый вечер. Нужна помощь в следующем вопросе у меня есть приложение zzz.exe я его запускаю с...

Создать процесс и продолжить работу, не ожидая завершения созданного процесса
эта программа работает: когда мы пишем (например) calc.exe,то программа открывает это приложение и...

Программа завершения процесса
Возможно ли написать программу, чтобы завершить процесс mail.ru agenta? Да, и если возможно, из...

Получение Pid процесса
Программа определяет размер и заполненность жесткого диска, название звуковой карты и выводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru