Ошибка CreateProcess () - PullRequest
       7

Ошибка CreateProcess ()

1 голос
/ 13 января 2012
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);

LPCWSTR procName =(LPCWSTR)"D:\\test dir 1\\Calc.exe";
LPWSTR procArg   =(LPWSTR)"blacknull";

if(CreateProcess(procName,procArg,0,0,0,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi))
{
    //do some work
}

printf( "CreateProcess failed (%d).\n", GetLastError());
     system("Pause");

продолжает выдавать ошибку (2) -> The System cannot find the file specified.

Я не знаю, что случилось. Я также пытался использовать "Calc.exe", который в том же Dir. но это не работает.

Ответы [ 2 ]

5 голосов
/ 13 января 2012

Вы используете префикс L для создания строки широких символов:

L"D:\\test dir 1\\Calc.exe";

Приведение строкового литерала к другой ширине символа не делает строку шире.

3 голосов
/ 13 января 2012

В дополнение к уже упомянутой проблеме строкового типа второй аргумент (lpCommandLine) должен указывать на доступный для записи буфер, а не на постоянную строку.Вы можете сделать это, объявив его следующим образом:

WCHAR procArg[] = L"blacknull";

Это задокументировано в MSDN : «Unicode-версия этой функции CreateProcessW может изменять содержимое этой строки.этот параметр не может быть указателем на постоянную память (например, константную переменную или буквенную строку). Если этот параметр является константной строкой, функция может вызвать нарушение прав доступа. "

...