CreateProcess не работает под Windows 7 - PullRequest
6 голосов
/ 10 августа 2011

Я пытаюсь скомпилировать устаревший код из Windows XP в новой среде в Windows 7. Он компилируется, но не выполняется во время выполнения.

CreateProcess () возвращает 0, а GetLastError () возвращает 2, что обозначаетERROR_FILE_NOT_FOUND

Вот мой вызов CreateProcess

STARTUPINFO StartInfo;
memset(&StartInfo, 0, sizeof(StartInfo));

wcsncpy(astrCommandLine, L"TFTP", MAX_OSCOMMANDLINE_SZ-1); 
BOOL bFuncRetn = CreateProcess(NULL, 
              astrCommandLine,     // command line 
              NULL,          // process security attributes 
              NULL,          // primary thread security attributes 
              NULL,          // handles are inherited 
              0,             // creation flags 
              NULL,          // use parent's environment 
              NULL,          // use parent's current directory 
              &StartInfo,          // STARTUPINFO pointer 
              &m_ProcInfo );   // receives PROCESS_INFORMATION 

Теперь о странностях: Когда вместо tftp я запускаю calc, выскакивает calc.Я могу выполнить все, что есть в моей командной строке, из любого места в командной строке, поэтому он говорит мне, что% PATH% в c: \ windows \ system32 известен и работает правильно.

Я пытался форсировать CreateProcessA с помощью ansiстроки, но я получил тот же результат.Я также попытался в конфигурации отладки и выпуска и из командной строки.

Любая идея?

РЕДАКТИРОВАТЬ: и calc.exe и tftp.exe находятся в c: \ windows \ system32, который находится всистемный путь.
не работает "c: \ windows \ system32 \ tftp"

1 Ответ

9 голосов
/ 13 июня 2012

Проблема в том, что у вас 32-битное приложение, пытающееся выполнить 64-битную команду Windows. Вам не нужно перекомпилировать ваше приложение как 64-битное для решения проблемы. Все, что вам нужно сделать, это изменить все вхождения c: \ windows \ system32 на c: \ windows \ SysNative.

В Windows 7 x64 ссылки на c: \ windows \ system32 из 32-разрядных программ автоматически перенаправляются в c: \ windows \ syswow64. Использование специального псевдонима c: \ windows \ SysNative приводит к тому, что Windows 7 не выполняет перенаправление.

...