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

时间:2010-02-15 21:41:34

标签: c windows winapi process

CreateProcess()出现了几次搜索谷歌.... 可以认为这是最安全,最有效的方法吗? 如果是这样,我想使用被调用进程的输出 在继续参加C课程之前,我怎么知道它已经完成?

感谢。

5 个答案:

答案 0 :(得分:2)

ShellExecute可用于创建进程,它是传递参数的更方便的方法。

但是如果你想使用这个过程的输出,那么CreateProcess可能是你最好的选择

使用CreateProcess,您可以传递STARTUPINFO结构,该结构可用于将文件管道句柄传递给标准输出过程。

CreateProcess会将包含HANDLE的PROCESS_INFORMATION结构返回给创建的进程。当进程退出时,该句柄将被发出信号。

所以你可以在进程句柄上WaitForSingleObject等待输出完成。

完成后,不要忘记对进程句柄和线程句柄CloseHandle

答案 1 :(得分:1)

取决于您如何衡量效率。 system()是程序员有效的。

另见exec()及其兄弟。

答案 2 :(得分:1)

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);

答案 3 :(得分:1)

如何执行Windows程序并捕获其输出的经典来源是this article on MSDN - 它实际上没有它看起来那么复杂。

答案 4 :(得分:1)

如果您需要完全控制(更改标准输入/输出等),CreateProcess是您的最佳选择。如果您正在执行用户指定的内容,则确实需要使用ShellExecute [Ex],因为对于需要UAC提升的应用程序,CreateProcess将失败(ShellExecuteEx还可以在您启动应用程序时为您提供子进程的句柄