【问题标题】:CreateProcess fails under windows 7CreateProcess 在 Windows 7 下失败
【发布时间】:2011-08-09 22:51:57
【问题描述】:

我正在尝试在 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”不起作用

【问题讨论】:

  • tftp 是通过应用路径而不是系统路径找到的吗?这可能解释了为什么找到 calc 但没有找到 tftp。 CreateProcess 不使用应用程序路径。我假设您在某处设置 StartInfo.cb。
  • 这行得通的希望非常渺茫。当然 tftp.exe 不在您程序的默认工作目录中。 Calc.exe 没有问题,它在 PATH 上。传递 .exe 的 full 路径名,例如 c:\foo\bar\tfpt.exe。
  • 我从未听说过 StartInfo.cb
  • 显然是一个愚蠢的问题,但您确定您正在测试的系统上什至有 tftp.exe 吗? Windows 7默认不再安装tftp客户端,需要通过“程序和功能”控制面板中的“Windows功能”添加。
  • 你试过用Process Monitor监控你的程序吗?这应该准确显示正在读取哪些文件和注册表项以及失败的确切原因。

标签: c++ windows createprocess


【解决方案1】:

问题是您有一个 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-02-28
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-09-16
    • 2012-11-02
    相关资源
    最近更新 更多