CreateProcess всегда терпит неудачу - PullRequest
0 голосов
/ 24 апреля 2020

Я пытался создать процесс с CreateProcess в C ++. Но эта функция всегда возвращает false.

Вот некоторые части моего кода:

#if UNICODE
    std::wstring exename =
#else
    char* exename =
#endif
    _T("‪c:\\Windows\\Notepad.exe");

    STARTUPINFO si;
    memset(&si, 0, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;

    PROCESS_INFORMATION pi;
    if (!CreateProcess(exename, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
    {
        cout << "Error code=" << GetLastError() << endl;
    }

Программа показывает код ошибки 123. И я попытался сделать exename в качестве второго параметра, затем код ошибки изменился на 2.

Я погуглил его в течение дня и попытался изменить кодировку проекта на Multibyte или Unicode, заменив CreateProcess на CreateProcessA или CreateProcessW, заменив char * с LPCSTR или LPCWSTR и многими другими попытками. Никто из них не решил проблему, но показал тот же код ошибки.

Я запускаю этот код в Windows 10 и компилирую его с Visual Studio 2013. Я уверен, что «c: \ Windows \ Notepad. exe "существует на моем компьютере.

Это свело меня с ума, пожалуйста, помогите мне. Любая подсказка приветствуется.

Решение этой проблемы:

Не копируйте и не вставляйте путь к файлу из диалогового окна свойств проводника Windows, оно может содержать некоторые скрытые персонажи.

1 Ответ

7 голосов
/ 24 апреля 2020

Я не уверен, что вы пытаетесь нас обмануть, но перед c:\\ (сразу после ") есть невидимый символ.

Скопируйте / вставьте эту строку из здесь, чтобы заставить его работать:

auto const exename = _T("c:\\Windows\\Notepad.exe");

Вы можете увидеть скрытого персонажа, используя редактор HEX:

enter image description here

Вы можете проверить скопируйте / вставьте строку вопроса в этот онлайн-редактор шестнадцатеричных символов .

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