注册 登录
编程论坛 VC++/MFC

小白求大神指教,关于mfc不能打开exe文件的问题

z1143709608 发布于 2016-03-13 21:24, 5921 次点击
用mfc写了一个打开外部exe文件的程序,button的响应事件代码如下:ShellExecuteA(NULL, "open","E:\\project\\dongtinglake\\DthGis v15.06.23\\Release\\DthGis.exe",   NULL,   NULL,   SW_SHOW);
其中DthGis.exe为一个使用QT跟OSGearth(一种渲染插件)编写的程序的可执行文件,在release中单独打开这个exe是可以的,但是使用上述代码却不能打开。将代码中的exe文件换成其他c++编写的普通无插件exe,同样可以打开,所以请教大神为什么我不能打开DthGis.exe?跟插件有关吗?在线等,谢谢!
10 回复
#2
z11437096082016-03-13 21:25
不能沉啊,求大神解答
#3
z11437096082016-03-13 21:26
有人吗
#4
z11437096082016-03-13 21:32
大神在哪里?
#5
天使梦魔2016-03-13 21:59
ShellExecute(
hWnd: HWND; {指定父窗口句柄}
Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2]  }
FileName: PChar; {指定要打开的文件或程序}
Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil}
Directory: PChar; {缺省目录}
ShowCmd: Integer {打开选项}



如果exe调用相对路径目录则无法正确。如果使用NULL缺省,就是系统默认目录,可能是你的exe目录或者系统。被调用程序从指定处是无法使用相对路径的。
#6
z11437096082016-03-13 22:15
回复 5楼 天使梦魔
DthGis.exe在原先目录可以双击打开,直接移动DthGis.exe后则不能打开,移动DthGis.exe以及上层同一根目录下面对应数据之后,可以双击打开,所以我的这个DthGis.exe是不是涉及到数据依赖?然后我的“Directory: PChar; {缺省目录}”这一块应该如何填写?
#7
天使梦魔2016-03-13 22:34
都已经说了这么明白了。。。。。。。。。。。

"E:\\project\\dongtinglake\\DthGis v15.06.23\\Release\\"
替换掉你原来的NULL吧

环境参数问题,被启动的exe自己有相对目录,你调用又不传环境地址默认就从你的exe启动,但你的exe目录下没有被启动的那些文件。
#8
z11437096082016-03-13 22:41
回复 7楼 天使梦魔
谢谢!我刚刚也这样做的,只是用的是"E:\\project\\dongtinglake\\DthGis v15.06.23"替换的"NULL",我是想着"E:\\project\\dongtinglake\\DthGis v15.06.23"这个目录下面有DthGis.exe执行需要的数据,结果一直没打开成功,再往下设置一层目录到"E:\\project\\dongtinglake\\DthGis v15.06.23\\Release",就可以打开了,真心感谢!
#9
z11437096082016-03-13 22:55
回复 7楼 天使梦魔
我单独将DthGis.exe拷贝出去,双击不能运行,拷贝整个Release文件夹,双击之后也不能运行,一直要将跟release同根目录的data,image两个文件夹一起拷贝出去,双击才可打开,所以就一直想着用"E:\\project\\dongtinglake\\DthGis v15.06.23"替换"NULL”结果就一直不能打开,虽然现在可以运行了,但是我还是不明白为什么默认路径要设置在这一层。release文件夹下面有DthGis.exe  DthGis.exp  DthGislib  DthGis.pdb  。不需要跟release文件夹同根目录的data文件夹和image文件夹吗?
#10
天使梦魔2016-03-15 23:25
你要带着走的最好用相对路径,不要用E盘什么地址的。
被运行的EXE它自己使用的是相对路径,你给它的参数指定一个环境目录,这个环境目录就是模拟它当前运行目录。
那个EXE使用的是//data 和 //image这种目录,就是说在它当前文件夹找这两个文件夹。
所以无论你复制到哪里,D盘或者C盘,都不影响使用。因为在EXE当前永远都找的到下级文件。
#11
农民工2016-03-29 11:14
你这个exe 不但依赖release目录下的其他文件,h还依赖同release并列的data,image目录,缺一不可。
程序中找data,image时 是先找到release目录,再从release找并列的名为data,image目录。
所以 你只要设release目录就行
1