Windows 7下的CreateProcess失败

时间:2011-08-09 22:51:58

标签: c++ windows createprocess

我正在尝试在Windows 7的新环境下从Windows XP编译遗留代码。它在运行时编译但失败。

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时,会弹出计算结果。我可以在命令提示符的任何地方执行命令行中的任何操作,这样它就会告诉我%PATH%到c:\ windows \ system32已知且工作正常。

我试图用ansi字符串强制CreateProcessA,但我得到了相同的结果。我也尝试过调试和发布配置以及命令行。

有什么想法吗?

编辑: calc.exe和tftp.exe都位于系统路径中的c:\ windows \ system32中 运行“c:\ windows \ system32 \ tftp”不起作用

1 个答案:

答案 0 :(得分:9)

问题是您有一个32位应用程序试图执行64位Windows命令。您不必将应用程序重新编译为64位来解决问题。您所要做的就是将所有出现的c:\ windows \ system32更改为c:\ windows \ SysNative。

在Windows 7 x64中,32位程序对c:\ windows \ system32的引用会自动重定向到c:\ windows \ syswow64。使用特殊别名c:\ windows \ SysNative会导致Windows 7不执行重定向。