日常工作问题总结(三十二)shellExecute、shellExecuteEx、WinExec、CreateProcess的区别
2014-10-09 11:11
375 查看
shellExecute,shellExecuteEx,WinExec,CreateProcess这几个函数都可以启动一个exe(Exp:notepad.exe)文件,但是区别在哪,今天就粗略讲下我查阅资料后的结果。也希望大家提意见,发现不足之处。
1.shellExecute
(1.)打开exe应用程序(文件txt也可)
strCanonicalHref存放的即要打开的网址。一种是以ie浏览器打开,下面一种是使用默认浏览器打开。
(3.)参数解析
●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。
●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
●Directory:用于指定默认目录。
●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
2.shellExecuteEx
这个windows函数用的不多,但是要手动提升进程的权限时,就要用这个函数。
“runas”表示使用管理员权限运行。
3.WinExec
(1.) 函数原型:
(2.) 参数:
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
(3.) 使用:
4.CreateProcess
可参考:工作问题总结(三十)共享内存续(当文件映射对象的名称未知时)
5.总结
(1).
winexec() 只用于可执行文件,是一个老函数啦,虽然使用方便,但不推荐!(兼容性也不好)
(2).
shellexcute()是通过windows外壳打开任意文件,非可执行文件自动通过关联的程序打开对于可执行文件,区别不大,不过shellexcute可以指定运行时的工作路径,ShellExecute不仅能打开机器上的文件,还能打开网址。
shellexecuteEx()可用来提升进程的权限。
ShellExecute 与 ShellExecuteEx 的区别是 ShellExecuteEx 可以返回新创建进程的句柄,ShellExecute在创建进程后立即调用 CloseHandle 关闭新进程句柄,而ShellExecuteEx将返回新进程序句柄。
(3).
winexec() 必须有GetMessage或超时之后才返回!CreateProcess和ShellExecute都是直接返回的!
(4).
CreateProcess应该是ShellExecute / ShellExecuteEx 实现的基础。
1.shellExecute
(1.)打开exe应用程序(文件txt也可)
ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);(2.)打开url网址
ShellExecute(NULL, "open", "IEXPLORE", strCanonicalHref, NULL,SW_SHOWNORMAL); ShellExecute(NULL,"open",strCanonicalHref,NULL,NULL,SW_SHOWNORMAL);
strCanonicalHref存放的即要打开的网址。一种是以ie浏览器打开,下面一种是使用默认浏览器打开。
(3.)参数解析
●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。
●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
●Directory:用于指定默认目录。
●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
2.shellExecuteEx
这个windows函数用的不多,但是要手动提升进程的权限时,就要用这个函数。
SHELLEXECUTEINFO sei = {sizeof(SHELLEXECUTEINFO)}; sei.lpVerb = TEXT("runas"); sei.lpFile = TEXT("Package.exe"); sei.nShow = SW_SHOWNORMAL; if (!ShellExecuteEx(&sei)) { DWORD dwError = GetLastError(); }
“runas”表示使用管理员权限运行。
3.WinExec
(1.) 函数原型:
UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
(2.) 参数:
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
(3.) 使用:
WinExec("notepad.exe",SW_SHOW);//运行计事本
4.CreateProcess
if( !CreateProcess( NULL, (LPSTR)strGamePath.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &m_ClientSI, &m_ClientPI) ) { ZeroMemory( &m_ClientSI, sizeof(m_ClientSI) ); m_ClientSI.cb = sizeof(m_ClientSI); }
可参考:工作问题总结(三十)共享内存续(当文件映射对象的名称未知时)
5.总结
(1).
winexec() 只用于可执行文件,是一个老函数啦,虽然使用方便,但不推荐!(兼容性也不好)
(2).
shellexcute()是通过windows外壳打开任意文件,非可执行文件自动通过关联的程序打开对于可执行文件,区别不大,不过shellexcute可以指定运行时的工作路径,ShellExecute不仅能打开机器上的文件,还能打开网址。
shellexecuteEx()可用来提升进程的权限。
ShellExecute 与 ShellExecuteEx 的区别是 ShellExecuteEx 可以返回新创建进程的句柄,ShellExecute在创建进程后立即调用 CloseHandle 关闭新进程句柄,而ShellExecuteEx将返回新进程序句柄。
(3).
winexec() 必须有GetMessage或超时之后才返回!CreateProcess和ShellExecute都是直接返回的!
(4).
CreateProcess应该是ShellExecute / ShellExecuteEx 实现的基础。
相关文章推荐
- system,WinExec, ShellExecute,CreateProcess 区别
- WinExec, ShellExecute,CreateProcess 区别
- WinExec, ShellExecute, CreateProcess三个函数的区别和联系
- 日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName
- WinExec,ShellExecute ,CreateProcess 区别
- WinExec,ShellExecute ,CreateProcess 区别
- 【转】【C++】ShellExecute, WinExec, CreateProcess 三者的区别
- ShellExecute, WinExec, CreateProcess区别
- C/C++日常学习总结(第六篇)多基派生引起的虚函数访问二义性问题&重载,覆盖,隐藏的区别
- WinExec, ShellExecute,CreateProcess 区别
- WinExec,ShellExecute ,CreateProcess 区别
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
- 工作总结2 第三方库注意的问题
- 工作总结1 工程环境问题
- 2009年4月,总结工作上的2个问题,在Broadcom STB上访问MTD, 和修改CFE(a boot loader of broadcom)的奇怪的问题!
- 工作中常见FTP连接不上问题总结
- ShellExecute, WinExec, CreateProcess
- WinExec,ShellExecute ,CreateProcess
- 工作中常见FTP连接不上问题总结