[英]How do I call an executable from a C program (using winapi)?
ShellExecute可以用于创建进程,它是传递参数的更方便的方法。
但是,如果您想使用流程的输出,那么CreateProcess
可能是您最好的选择
使用CreateProcess
您可以传递一个STARTUPINFO结构,该结构可用于将文件管道句柄传递给流程的Standard Out。
CreateProcess
将向创建的进程返回一个包含HANDLE的PROCESS_INFORMATION结构。 当进程退出时,该句柄将发出信号。
因此,您可以在进程句柄上使用WaitForSingleObject来等待输出完成。
完成后,不要忘记在进程句柄和线程CloseHandle
上使用CloseHandle
。
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.