用shellexecute代替winexec出现了问题

yinweixian 2009-09-14 10:20:14
我本来是用winexec调用一个exe程序,exe程序运行也完全没有问题。
现在想要用shellexecute传个参数,使exe程序本身双击不能直接运行,一定要通过接收到这个参数才运行。

写法:winexec(PChar('d:\aaa.exe'),SW_SHOWNORMAL);aaa.exe程序不做任何处理;aaa.exe程序能正常调用和退出。

shellexecute(handle, 'open','d:\aaa.exe','aaa',nil,SW_SHOWNORMAL);在aaa.exe程序的工程文件中加入以后判断:
for i:=1 to paramcount do
if ParamStr(i)<>'aaa' then
halt;
aaa.exe程序能正常调用,但退出的时候就报内存出错,具体的提示是内存不能"read"。

搞了几天了,没有明白问题出在哪里,麻烦大家看看啊,是不是我aaa.exe程序本来就存在内存的问题呢?因为我测试了一个简单的程序,用shellexecute传个参数也是能正常调用和退出的。但如果是aaa.exe本身有问题的话,用winexec调用后退出程序为什么没有报内存错呢???


...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsnghw 2009-10-06
  • 打赏
  • 举报
回复
这个原因可能是被调用的应用程序操作文件的时候使用了相对路径,导致文件找不到,然后后继操作失败。
如果是这种情形,我这么理解不知道是否正确:
winexec可能是在当前目录下执行,因此可能正确。
shellexecute需要指定运行目录,默认是nil,这个时候指向的可能和winexec方式指定的运行路径。
tgbd 2009-09-17
  • 打赏
  • 举报
回复
楼主可以建一个空的表单编译成EXE试一下,仅在表单的ONCREATE中检查一下参数个数,看这样还有没有问题,如果没有,那就是你原来的aaa.exe有问题。
justin_wkf 2009-09-17
  • 打赏
  • 举报
回复
xuexi
hxy3100 2009-09-17
  • 打赏
  • 举报
回复
直接单击 开始 运行 命令行中输入你的程序 参数
试一下,若还是报错误,则是你的aaaa.exe程序有问题
wjbwjb 2009-09-15
  • 打赏
  • 举报
回复
顶一下
yinweixian 2009-09-15
  • 打赏
  • 举报
回复
TO tgbd:
用winexec带参数结果也是一样,退出被调用程序还是报内存不能"read"。
不管我用winexec还是shellexecute,只要不带参数就可以,带了参数就出那个错。

急啊,麻烦大家看看啊!
tgbd 2009-09-15
  • 打赏
  • 举报
回复
上面sys_path:=ExtractFilePath*paramStr(0); 打错
tgbd 2009-09-15
  • 打赏
  • 举报
回复
楼主可以这样试试:
在要运行的程序中:winexec(pchar(myrun),SW_SHOW);//其中myrun为一程序(包括路径)、用户名、密码的字符串


在aaa.exe程序的主表单的onCreate事 件中加入检查
例:
if paramCount<>2 then
begin
showmessage('请从OA中运行此程序');
application.terminate;
end
else begin
curr_user:=paramStr(1);
curr_passwd:=paramStr(2); //
sys_path:=ExtractFilePath*paramStr(0);
connect_database;
end;
gyp520 2009-09-15
  • 打赏
  • 举报
回复
帮顶,学习

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧