VC中用ShellExecute等函数执行exe出现错误,但是鼠标双击就可以,这是为什么?
代码:hRet=ShellExecute(NULL,"open",C:\\APPLIC\\LCTLEX3\\LctLex3.exe",NULL,NULL,SW_SHOWD...
代码:
hRet = ShellExecute(NULL,"open",C:\\APPLIC\\LCTLEX3\\LctLex3.exe",NULL,NULL,SW_SHOWDEFAULT);
执行后先弹出上面的图二错误信息,点确定后会出现LctLex3进程,如下图
但是窗口是非正常显示,没有正确执行,什么都没显示,如下图。
也试过其他函数,ShellExecuteEx,CreateProcess和WinExec都没有成功。非常困惑,用鼠标双击LctLex3.exe,是可以正常执行的,用CMD命令也可以正常执行的,实在找不出啥原因,请帮忙解答,非常感谢! 展开
hRet = ShellExecute(NULL,"open",C:\\APPLIC\\LCTLEX3\\LctLex3.exe",NULL,NULL,SW_SHOWDEFAULT);
执行后先弹出上面的图二错误信息,点确定后会出现LctLex3进程,如下图
但是窗口是非正常显示,没有正确执行,什么都没显示,如下图。
也试过其他函数,ShellExecuteEx,CreateProcess和WinExec都没有成功。非常困惑,用鼠标双击LctLex3.exe,是可以正常执行的,用CMD命令也可以正常执行的,实在找不出啥原因,请帮忙解答,非常感谢! 展开
2个回答
展开全部
初步判断是调用ShellExecute这个函数时没有指定缺省目录。请参考该Api参数意义,并将缺省目录指定为exe文件所在目录。
追问
之前的代码:
ShellExecute(NULL,"open","C:\\APPLIC\\LCTLEX3\\LctLex3.exe",NULL,NULL,SW_SHOWDEFAULT);
改完之后的代码:
ShellExecute(NULL,"open","C:\\APPLIC\\LCTLEX3\\LctLex3.exe",NULL,"C:\\APPLIC\\LCTLEX3",SW_SHOWDEFAULT);
改完之后确实可以执行了。
不过还不明白缺省目录的作用是干什么用的
已经非常感谢了!
追答
是这样,你要执行的程序肯定使用了loadpicture这类函数运行时载入了这个bmp文件,由于载入bmp使用了相对路径,它将搜索他的缺省路径下有没有这个bmp文件。双击打开的话系统将指定缺省路径为exe文件所在路径,而使用shellexecute打开,如果你不指定缺省路径,函数将于内部指定缺省路径为你编写这个程序的缺省路径,而这个路径下是没有这个bmp的,所以打不开。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询