CreateProcess()出现了几次search谷歌….
可以假设这是最安全和最有效的方法吗?
如果是这样,我想使用被调用进程的输出。
在继续使用C程序之前,我怎么知道它已经完成?
谢谢。
ShellExecute可以用来创建一个进程,它是一个更方便的传递参数的方法。
但是如果你想使用过程的输出, CreateProcess
可能是你最好的选择
使用CreateProcess
您可以传递一个STARTUPINFO结构,该结构可用于将文件管道句柄传递给标准输出进程。
CreateProcess
将返回一个包含HANDLE的PROCESS_INFORMATION结构给创建的进程。 当进程退出时,该句柄将变成信号。
所以你可以在进程句柄上等待WaitForSingleObject来等待输出完成。
完成后不要忘记CloseHandle
处理句柄和线程句柄。
取决于你如何衡量效率。 system()
是程序员高效的。
另见exec()
及其许多兄弟。
CreateProcess()
是产生子进程的相当低级的函数,可能不是最方便的选择。 对于需要读取输出的C程序,可以考虑popen()
(注意MS CRT在其名称前加了一个下划线):
FILE *f = _popen("dir", "r"); char buf[1000]; while (fgets(buf, sizeof(buf), f)) { // .. process output using stdio functions } _pclose(f);
关于如何执行Windows程序和捕获它的输出的经典源码是MSDN上的这篇文章 – 它实际上并不像看起来那么复杂。
如果你需要完全控制(改变标准输入/输出等),CreateProcess是你最好的选择。 如果你正在执行用户指定的东西,你确实需要使用ShellExecute [Ex],因为对于需要UAC提升的应用程序来说,CreateProcess将会失败(当你启动应用程序时,ShellExecuteEx也能给你一个子进程的句柄)