7

我正在尝试在 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 

现在奇怪的是:当我运行 calc 而不是 tftp 时,会弹出 calc。我可以在命令提示符的任何位置执行我的命令行上的任何内容,因此它告诉我到 c:\windows\system32 的 %PATH% 是已知的并且可以正常工作。

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

任何想法?

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

4

1 回答 1

11

问题是您有一个 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 不执行重定向。

于 2012-06-13T19:35:18.877 回答