在 C++ 中从 ShellExecute() 和 System() 运行时,批处理文件未按预期工作

Batch file is not working as expected when run from ShellExecute() and System() in C++

提问人:Jordan Burkhardt 提问时间:11/2/2023 更新时间:11/2/2023 访问量:61

问:

我正在尝试使用以下代码从 c++ 执行 .bat 文件 startcp2k。

ShellExecute(NULL, TEXT("open"), TEXT("cmd.exe"),TEXT("/C startcp2k.bat -i input.txt -o output.txt"), TEXT("C:\\Path\\To\\Program\\"), SW_SHOWNORMAL);

当我打印函数的输出时,它返回 2A,表示它正在执行,因为它大于 32。当我在命令提示符下运行此命令时,我得到一个文本输出文件,但是使用上述命令在 c++ 中运行时我没有得到它。

我在使用 Visual Studio 2022 的 Windows 上。我打算稍后在 linux 上编译它。我没有创建 .bat 文件,我必须使用这个文件。

我在整个计算机中搜索输出文件,它没有重定向到意想不到的地方,只是没有输出。

我正在编译 64 位,而 .bat 文件为 64 位。.bat 文件对我的计算机管理员、“系统”和我的帐户具有完全权限。

我也尝试使用system(),但我遇到了同样的问题。我尝试了 CreateProcess(),但它对我来说太复杂了,我无法运行,而且我不相信它会逃避这个问题,因为 ShellExecute() 调用创建进程。

C++ 批处理文件 系统 shellexecute

评论

0赞 Some programmer dude 11/2/2023
你到底在打印什么?什么是“回报”?这代表什么?是字符串吗?十六进制数?它是由哪里印刷的?由谁?您能否尝试创建一个最小的可重现示例来向我们展示,以及您获得的实际输出的复制粘贴?2A2A
0赞 Some programmer dude 11/2/2023
另外,是在 中还是在当前工作目录中?startcp2k.batPATH
0赞 Retired Ninja 11/2/2023
在批处理文件中暂停,以便您可以查看它是否正在运行。工作目录可能不是批处理文件所在的位置,并且找不到它。
0赞 Paul Sanders 11/2/2023
或者尝试使用绝对路径
1赞 user4581301 11/2/2023
旁注:考虑在代码中保存一些键入和干扰,并选择宽字符或 ANSI 字符(我建议使用宽字符)。宏是编写在 Win9X OS 行和 Win NT OS 行上运行的代码问题的解决方案。自从 Win NT 在 2000 年代初巩固其主导地位以来,这并不重要。TEXT

答: 暂无答案