CreateProcessA не работает или возвращает какие-либо ошибки - PullRequest
0 голосов
/ 06 марта 2020

Я пытался использовать CreateProcessA и CreateProcess для создания экземпляра блокнота, но безуспешно. CreateProcess всегда возвращает код ошибки 2, когда я его запускаю, но CreateProccessA вообще ничего не возвращает.

Это то, что у меня есть:

STARTUPINFOA startInfo;
PROCESS_INFORMATION processInfo;

ZeroMemory(&startInfo, sizeof(startInfo));
startInfo.cb = sizeof(startInfo);
ZeroMemory(&processInfo, sizeof(processInfo));

if (CreateProcessA(NULL, NULL,NULL,NULL,FALSE,NULL, NULL, "C:\\Windows\\notepad.exe", &startInfo, &processInfo)) {
    DWORD Error = GetLastError();
    MessageBoxA(NULL, "FAILED", "FAILED", MB_OK);
    printf("%d", Error);
    return 1;
}

1 Ответ

3 голосов
/ 06 марта 2020

Ошибка 2: ERROR_FILE_NOT_FOUND. Вы передаете путь к notepad.exe в параметре lpCurrentDirectory, но вместо этого он должен быть передан в параметре lpApplicationName или lpCommandLine:

CreateProcessA("C:\\Windows\\notepad.exe", NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &startInfo, &processInfo)
CreateProcessA(NULL, "C:\\Windows\\notepad.exe", NULL, NULL, FALSE, NULL, NULL, NULL, &startInfo, &processInfo)

Также вы вызов GetLastError(), когда CreateProcessA() успешно. Вы должны вызвать его, когда вместо CreateProcessA() произойдет сбой:

if (!CreateProcessA(...)) { // <-- note the !
    DWORD Error = GetLastError();
    ...
}

Наконец, спецификатор %d для printf() ожидает int, а не DWORD. Вместо этого используйте %ul, что предполагает unsigned long, то есть DWORD определяется как :

printf("%ul", Error);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...