Почему я не могу вызвать дочерний процесс, когда я поставил его C: / Windows / System32 /? - PullRequest
0 голосов
/ 26 ноября 2018

Я написал Project.exe, который показывает Hello World.Напишите основной процесс для создания дочернего процесса Project.exe.Однако, когда я помещаю Projetc.exe в C: / Windows / System32 /, я не могу правильно создать дочерний процесс Project.exe, но он может быть создан нормально, когда я помещаю его в другие каталоги.

Основная программа выглядит следующим образом:

#include <Windows.h>
#include <string.h>
#include <stdio.h>

int main() {
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);

    PROCESS_INFORMATION pi;
    wchar_t *p = (wchar_t*)TEXT("C:/Windows/System32/Project1.exe");
    CreateProcess(p, 0, 0, 0, 0, 0, 0, 0, &si, &pi);

    DWORD CurId = GetCurrentProcessId();    //Get the ID of the current process
    DWORD Pid = pi.dwProcessId;             //ID of the created process
    DWORD Tid = pi.dwThreadId;              //The main thread ID of the created child process
    printf("the ID of the current process:  %d\nID of the created process:  %d\nThe main thread ID of the created child process  %d\n", CurId, Pid, Tid);

    WaitForSingleObject(pi.hProcess, -1);
}

Результат операции:

enter image description here

Если я поместил Project.exe в E: /,результат

enter image description here

В чем причина этого, как мне нужно изменить его для успешной работы в / System32 /?

1 Ответ

0 голосов
/ 12 декабря 2018

Общий ответ таков: если вы хотите знать, почему вызов не выполняет то, что вы ожидаете, вы должны сначала посмотреть на состояние возврата, чтобы выяснить, сработал ли вызов.

Документация для CreateProcess говорит, что возвращает ненулевое значение в случае успеха, ноль в случае неудачи.Вы не смотрите на возвращаемое значение, поэтому ваш код не знает об успехе или неудаче.

Кроме того, при неудаче GetLastError () вернет причину сбоя.Это может сказать вам, что происходит.

Короче говоря, вам нужно "если возвращаемое значение равно нулю, выведите значение GetLastError () и выйдите".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...