运行.exe文件并获取返回值(使用WinExec和system的区别)

原创 2016年08月29日 14:28:54

最近,跟同学在写一个界面,需要调用到已经release出来的.exe文件,这其中就需要传输命令行参数获取返回值,虽然不是很复杂的一件事,但还是把找到的一些资料记录下来,也许会给遇到相同疑问的朋友带来一点方便。

一开始,我使用的是WinExec函数,百度一下调用.exe文件的函数,便会有一大堆关于WinExec、ShellExecute、CreateProcess这三个函数的介绍,它们的复杂程度从低到高依次增加,可见WinExec是最简单的一个了,因为我只需要简单的调用,所以暂时使用WinExec。

关于以上三个函数的使用,可以参考下面的链接:http://blog.csdn.net/manji_lee/article/details/8079110

本以为万事大吉了,但是,我的程序需要获取运行.exe之后的返回值(.exe源码中main函数return的值),然后用一个if条件语句,根据返回的值进行不同的操作。我发现,虽然成功运行了.exe,但是返回给我的值一直是33。

	string path = "F:\\My_Work\\Code\\C++\\test2\\Debug\\test2.exe";
	int a = WinExec(path.data(), SW_SHOWMAXIMIZED);
也就是说,我成功运行上面的代码,但是a一直为33,后来才发现,WinExec只能返回是否运行成功,返回值大于31,则表示运行成功。所以,实际上,我并不能真正得到我想要的返回值——main函数的return值。

关于WinExec函数的返回值说明,可以参考下面的链接:http://www.cnblogs.com/ziwuge/archive/2012/03/12/2392472.html

所以我找到了system()函数,将代码修改为如下的形式:

	string path = "F:\\My_Work\\Code\\C++\\test2\\Debug\\test2.exe";
	//int a = WinExec(path.data(), SW_SHOWMAXIMIZED);
	int b = system(path.data());
此时,便能够正确地得到.exe源码中main函数return的值了。

关于system和WinExec的区别,可以参考下面的链接:http://shashanzhao.com/archives/642.html

该链接中,第4点说法如下:

system是同步调用进程,调用的进程不结束,就不返回。而WinExec是不同步的进程调用,一调用就立刻返回一个值(该值代表是否运行成功),不会等调用的程序结束。举个例子:

若还不理解main函数的命令行参数argc和argv的用法的,可以参考下面的链接:

http://zhidao.baidu.com/link?url=sPhn7dpegsBMhMOtkGJSO0_d9OtjW4MfDq9BX_1XEfkqGICqU2YPRNTdUlQaiC-1Fztdh1n5DzazeCU9B2Br3_

test2编译生成test2.exe:


test5调用test2.exe,分如下两种情况:

(1)使用system()函数,如下图:


则0在最后一行显示:


(2)使用WinExec()函数,如下图:


则33(表示.exe调用正常的返回值)在最前面显示:





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

WinExec()和system()的区别

WinExec()是一个WIN32 API,它的第一个参数必须包含一个可执行文件名, System()是C库函数,它接受一个DOS命令。 ShellExecute()和WinExec()区别...
  • ghevinn
  • ghevinn
  • 2013年03月05日 14:23
  • 5354

vc中winexec使用

 ***** *****首先,常量字符串中‘\’必须写成‘\\’,也就是WinExec("E:\QQ.EXE",SW_SHOW); 必须改为: WinExec("E:\\QQ.EXE",SW...

WinExec() system() ShellExecute() 区别

WinExec()是一个WIN32 API,它的第一个参数必须包含一个可执行文件名, System()是C库函数,它接受一个DOS命令。 ShellExecute()和WinExec()区别 ━...

ShellExecute, WinExec, CreateProcess

ShellExecute, WinExec, CreateProcessShellExecute  ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个...

一个等待Winexec执行完成后再继续执行后面代码的函数

//CMD 要执行的文件路径//Visiable 是否显示窗口Function WinExecExW(CMD:Pchar; Visiable:integer):DWORD;var    Startup...
  • tg2003
  • tg2003
  • 2010年03月22日 20:54
  • 1674

用WINEXEC调用一个可执行文件,如何判断执行完毕

用CreateProcess PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof ...

WinExec、ShellExecute和CreateProcess及返回值判断方式

有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。     WinExec主要运行EXE文...
  • educast
  • educast
  • 2013年10月12日 14:46
  • 1406

C# 运行.exe 并获取返回值

protected int ProcessInfoReturnValue()     {         try         {              string strExePat...

C中调用带参数的exe并接收返回值

test.exe#include #include int main(int argc, char* argv[]) { return 0; } 获取test.exe的返回值#includ...
  • jinhill
  • jinhill
  • 2010年09月17日 12:00
  • 4643

批处理调用exe获取返回值

最近要用一个batch文件依次执行三个exe文件, @echo off 1.exe 2.exe 3.exe       要求是如果任意一个exe文件不能正确执行,后面的exe将不能运行。...
  • educast
  • educast
  • 2013年10月15日 11:05
  • 9308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行.exe文件并获取返回值(使用WinExec和system的区别)
举报原因:
原因补充:

(最多只允许输入30个字)