就像在标题中我想知道是否可以通过在CreateProcess()中使用重定向运算符来传递输入。我试过以下的东西:
CreateProcess(NULL, "%ComSpec% /c c:\\somebatch.bat", NULL, NULL, ...);
其中somebatch.bat
包含c:\app.exe < c:\input.txt
并且未传递输入,只需启动app.exe
。在输出上它说:
c:\working_directory> c:\app.exe < c:\input.txt
c:\working_directory>Not enough storage is available to process this command.
(弄乱irpcstack并没有帮助)
你们是否知道任何魔术可以让我做我想要的而不会弄乱hStdInput
管道,坦率地说我想避免。欢呼声。
答案 0 :(得分:0)
我已经做了一段时间了,但你必须在传递的STARTUPINFO
struct中设置hStdInput
成员作为CreateProcess的倒数第二个参数。我很确定没有其他好方法可以做到这一点。使用hStdInput
非常简单,打开要用作输入的文件,将hStdInput
设置为文件句柄,创建进程并关闭句柄。
您可以打开输入文件,将句柄复制到当前流程标准输入中,然后创建将bInheritHandles
设置为TRUE
的流程。然后,您的程序将通过stdin
简单地接收文件内容。我从未在Windows中尝试过这种方法,但这在基于UNIX的平台上很常见。
至于运行批处理文件,请阅读MSDN entry for CreateProcess
中的注释。我认为你的论点搞砸了。
答案 1 :(得分:0)
您有什么理由需要CreateProcess
吗?
system
函数使用默认shell(因此您不需要放入%ComSpec%
),这意味着重定向可以正常工作。它也更容易使用,更便携。如果您只是等待该过程完成,请考虑改为使用system
。