繁体   English   中英

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

[英]How do I call an executable from a C program (using winapi)?

CreateProcess()多次搜索Google。
可以确定这是最安全,最有效的方法吗?
如果是这样,我想使用被调用进程的输出。
在继续进行C程序之前,我怎么知道它已经完成?

谢谢。

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

但是,如果您想使用流程的输出,那么CreateProcess可能是您最好的选择

使用CreateProcess您可以传递一个STARTUPINFO结构,该结构可用于将文件管道句柄传递给流程的Standard Out。

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

因此,您可以在进程句柄上使用WaitForSingleObject来等待输出完成。

完成后,不要忘记在进程句柄和线程CloseHandle上使用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还可以在启动应用程序时为子进程提供句柄)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM