调用外部程序的几种方法

有详细介绍的博客:

C++执行外部程序(调用外部exe程序) - JavaShuo

C++调用外部应用程序的方法的整理总结(常用) (shuzhiduo.com)

我这里主要总结下几种方法的优缺点

前面三种方法,相对简单,但是使用也有局限,方法四相对复杂,但是灵活性高,能满足多种需求。System、ShellExecute和WinExec命令用于简单的作业。如果要完全控制一个新进程,就必须调用CreateProcess。

方法1. WinExec

WinExec()函数的作⽤是执⾏指定的程序。

使用示例:WinExec("e:\\1.exe", SW_SHOW);

方法2. System

system函数已经被收录在标准c库中,头文件为<stdlib.h>

使用示例:system("D:\\main.exe");

缺点:会有命令行窗口

方法3. ShellExecute

ShellExecute不只能够运行exe文件,也能够运行已经关联的文件

ShellExecute是异步执行的,不管执行的程序是否成功运行,运行的时间是长是短,ShellExecute函数都会立即返回

HINSTANCE hNewExe = ShellExecuteA(NULL, "open", "d:\\test.log", NULL, NULL, SW_SHOW);

方法4. CreateProcess

CreateProcess()函数的作⽤是在主线程中创建新的进程。

使用示例:

STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = TRUE;
BOOL bRet = CreateProcess(NULL, const_cast<LPTSTR>(pre_cmd_line.c_str()), NULL,
			NULL, FALSE, CREATE_NO_WINDOW, NULL, 
            const_cast<LPTSTR(cmd_directory_line.c_str()), &si, &pi);
if (bRet)
{
	// 不使用的句柄最好关掉
	CloseHandle(pi.hThread);
	CloseHandle(pi.hProcess);
	pi.hProcess = NULL;
	pi.hThread = NULL;
	pi.dwProcessId = 0;
	pi.dwThreadId = 0;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值