【问题标题】:CreateProcess fails to run batch file with error code 2CreateProcess 无法运行批处理文件,错误代码为 2
【发布时间】:2014-08-14 08:31:34
【问题描述】:

我正在创建一个执行批处理文件的子进程

success = CodebenderccAPI::CreateProcess(
    NULL,
    (LPWSTR)command.c_str(),     // command line
    NULL,                        // process security attributes
    NULL,                        // primary thread security attributes
    TRUE,                        // Inherit pipe handles from parent process
    CREATE_NEW_CONSOLE,          // creation flags
    NULL,                        // use parent's environment
    current_dir,                 // use the plugin's directory
    &si,                         // __in, STARTUPINFO pointer
    &pi);                        // __out, receives PROCESS_INFORMATION

上面的代码已经过测试,可以在各种机器上正常运行,但最近在 Windows 7 机器上失败了,我仍在试图找出原因......

我已确保用户对安装批处理文件的文件夹具有管理权限,并且批处理文件位于工作目录中。此外,我禁用了防病毒软件(以验证它没有导致问题)并再次尝试但没有成功。 CreateProcess 总是失败,错误代码为 2:ERROR_FILE_NOT_FOUND。

有什么可能导致失败的想法吗?

【问题讨论】:

  • 我不认为这是你的问题,但为了将来参考你不应该将 c_str() 传递给 CreateProcess。您不应该写入 c_str() 返回的缓冲区,而 CreateProcess 会。
  • 我同意,这似乎不是代码错误,但我想不出任何其他可能导致 ERROR_FILE_NOT_FOUND 失败的原因。
  • 在命令行输入相同的命令是否有效?在调用 CreateProcess 帮助之前是否在命令前面加上 cmd /c ?哦,你有没有仔细检查过command 是一个宽字符串? (如果它是一个窄字符串,强制转换将隐藏类型不匹配。)
  • 如果在命令行输入并且命令变量是 const std::wstring & 类型,则命令有效。 :(
  • 你试过把cmd /c放在命令的开头吗?字符串的确切值是多少?

标签: windows createprocess file-not-found


【解决方案1】:

最后我设法找出导致 CreateProcess 失败的原因。 打开 cmd 和 cd 到批处理文件所在的文件夹,然后运行批处理文件没有任何问题。在此之后,我通过文件系统导航到该文件夹​​并双击批处理文件以运行它。它失败并显示错误消息“Windows 找不到 the_path_to the batch_file。请确保您输入了正确的名称,然后重试。” 根据this post,上述错误与 COMSPEC 条目有关。在注册表中检查了它的值,发现它与default value不同。将其值更新为默认值,问题就解决了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多