ShellExecute调用程序出现R6010 -abort() has been called
来源:互联网 发布:软件测试理论基础知识 编辑:程序博客网 时间:2024/04/28 19:05
ShellExecute调用程序出现R6010 -abort() has been called 错误
HINSTANCE hIns = ShellExecute(NULL, "open", _T("../bin/xxxx.exe"), NULL, NULL, SW_SHOWNORMAL);
一个MFC工程,调用一个Win32工程的EXE,出现上述问题
EXE执行需要OpenCV等外部链接库,且链接库也位于EXE文件中,
需将依赖的链接库目录作为参数传入,即可正常执行
HINSTANCE hIns = ShellExecute(NULL, "open", _T("../bin/xxxx.exe"), NULL, _T("../bin/"), SW_SHOWNORMAL);
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
WinExec、ShellExec、CrateProcess用法及区别
区别:
功能上: createprocess > shellexecute > winexec 复杂程度也是!
winexec() 只用于可执行文件,是一个老函数啦,虽然使用方便,但不推荐!(兼容性也不好)
shellexcute()是通过windows外壳打开任意文件,非可执行文件自动通过关联的程序打开对于可执行文件,区别不大,不过shellexcute可以指定运行时的工作路径
winexec() 必须有GetMessage或超时之后才返回!CreateProcess和ShellExecute都是直接返回的!
三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:
WinExec
这个函数最简单,只有两个参数,原型如下:
两个参数,前一个指定路径,后一个指定显示方式如SW_SHOW,SW_MAXIMIZE,SW_HIDE等。
使用方法如下:
WinExec("Notepad.exe", SW_SHOW);
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打开Test.exe
需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的窗体,但是已经被加到任务列表里了。
ShellExecute
原型如下:
);
最后的那个参数,为窗口指定可视性方面的一个命令。
请用下述任何一个常数
SW_HIDE
SW_MINIMIZE
SW_RESTORE
SW_SHOW
SW_SHOWMAXIMIZED
SW_SHOWMINIMIZED
SW_SHOWMINNOACTIVE
SW_SHOWNA
SW_SHOWNOACTIVATE
SW_SHOWNORMAL
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打开C:\Test.txt 文件
ShellExecute(NULL, "open", "http://www.google.com",/
ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:\C++
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txt
ShellExecute不支持定向输出。
ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器,则该函数将根据Windows
格式一:C++用法,唯一能开一个新窗口显示网页的方法
格式二:http://网站域名/网页文件名。
如:ShellExecute(handle,
如果将FileName参数设置为“mailto:”协议格式,那么该函数将启动默认邮件客户程序,如Microsoft
格式一:mailto:
如:ShellExecute(handle,‘open’,
格式二:mailto:用户账号@邮件服务器地址
如:ShellExecute(handle,
格式三:mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文
如:ShellExecute(handle,
CreateProcess
原型如下:
使用方法如下:
可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
关于三个SDK函数: WinExec, ShellExecute,CreateProcess 的其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include <shlobj.h> // 可替换为 windows.h
#include <shellapi.h>
如果定义了头文件 #include <windows.h>的话就不必定义 #include <shlobj.h>了,"windows.h" 不光是包含了"shellapi.h",它还定义了许多数据类型,如果没有这些数据类型,shellapi.h本身会出错。
2、定义路径
C++中所表示的路径要用 " \\ "而不是平常所用的" \ ",所以以上三个函数表示路径都为:
Disk:\\Directory\\...\\File name
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
3、程序启动错误。例如我们需要启动程序A,而程序A需要调用dat、ini等数据及配置文件,此时只能使用ShellExecute,CreateProcess 并且一定要指定参数中的文件路径。
例如:ShellExecute(NULL,"open","D:\\Program Files\\推箱子\\BoxMan.exe",NULL,"D:\\Program Files\\推箱子\\",SW_SHOWNORMAL);
只能等程序A执行完操作才能开启,由于不是一个进程,不能用多线程,不过理念是一样的就是调用WaitForSingleObject()。例程如下:
void Fun()
{
- ShellExecute调用程序出现R6010 -abort() has been called
- R6010 abort() has been called
- R6010 abort() has been called
- R6010 abort() has been called
- Debug Error! R6010 -abort() has been called
- Debug Error! R6010 abort() has been called
- R6010 abort() has been called 错误
- Debug error R6010 abort() has been called
- Debug Error! R6010 -abort() has been called
- r6010 abort() has been called问题
- R6010 -abort() has been called错误
- Debug Error! R6010 -abort() has been called
- R6010 -abort() has been called错误分析及其解决方法
- 第二篇:opencv纠错,R6010-abort() has been called
- R6010 -abort() has been called错误分析及其解决方法
- R6010 -abort() has been called错误分析及其解决方法
- abort has been called
- Debug R6010 abort() has benn called
- 修改主机域名
- DNS服务
- 第一章:在IDEA里搭建基于Forge的Minecraft mod开发环境
- 控制反转(IoC)与依赖注入(DI)
- android This tag and its children can be replaced by one <TextView/> and a compound drawable 布局文件提示
- ShellExecute调用程序出现R6010 -abort() has been called
- MG3732使用笔记
- unity平台的预处理
- Linux下防CC攻击:封掉某个ip
- 【凯子哥带你学Framework】Activity启动过程全解析
- sql server select case when的用法
- 好的报纸
- 【android学习笔记】 android studio 编译调试 错误
- jquery.validate.js的基本用法入门