如何从C程序(使用winapi)调用可执行文件?

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也能给你一个子进程的句柄)