为何使用CreateProcess调用时另一可执行文件无参数格式提示?
这事儿核心原因其实在两个可执行文件本身的实现差异上,跟CreateProcess的调用关系不大,具体可能有这几种情况:
目标程序本身没写参数提示逻辑
你看到的第一个程序的参数格式提示,是它的开发者专门写的代码逻辑——当程序检测到传入的参数不符合要求(比如没传参数、参数格式错误)时,就主动输出用法提示。而第二个程序可能根本没做这个判断:它要么没参数也能正常执行默认逻辑,要么即使参数出错也默默退出,完全没设计“输出提示”这一步。输出流捕获的问题
用CreateProcess调用程序时,如果没有正确配置标准输出/错误流的重定向,第二个程序的提示可能已经输出了,但你没接收到。比如第一个程序把提示写到了标准输出(stdout),而第二个写到了标准错误(stderr),但你的调用代码只捕获了stdout,自然看不到提示。你传递的参数其实符合要求
有可能你调用第二个程序时,传入的参数刚好是它能正常处理的,所以它没必要输出提示;而第一个程序你传的参数确实不符合规则,才触发了提示。建议你先手动在命令行里直接运行第二个程序(不带参数或者故意传错参数),看看会不会弹出提示:如果命令行里也没有,那就是程序本身没做这个逻辑;如果命令行里有,那就是CreateProcess的流配置出了问题。程序的运行逻辑天生不需要参数
有些程序是无参数也能正常工作的(比如记事本、画图工具),双击打开就直接进入主界面,这类程序自然不会输出参数提示。而第一个程序可能是依赖参数才能运行的命令行工具(比如批量处理脚本、压缩工具),必须传入参数才能执行有效逻辑,所以没参数时就会主动提示用法。
内容的提问来源于stack exchange,提问作者Master James

