我本来是用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调用后退出程序为什么没有报内存错呢???

解决方案 »

  1.   

    楼主可以这样试试:
    在要运行的程序中: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;
      

  2.   

    上面sys_path:=ExtractFilePath*paramStr(0); 打错
      

  3.   

    TO tgbd:
    用winexec带参数结果也是一样,退出被调用程序还是报内存不能"read"。
    不管我用winexec还是shellexecute,只要不带参数就可以,带了参数就出那个错。急啊,麻烦大家看看啊!
      

  4.   

    直接单击 开始 运行 命令行中输入你的程序 参数
    试一下,若还是报错误,则是你的aaaa.exe程序有问题
      

  5.   

    楼主可以建一个空的表单编译成EXE试一下,仅在表单的ONCREATE中检查一下参数个数,看这样还有没有问题,如果没有,那就是你原来的aaa.exe有问题。
      

  6.   

    这个原因可能是被调用的应用程序操作文件的时候使用了相对路径,导致文件找不到,然后后继操作失败。
    如果是这种情形,我这么理解不知道是否正确:
    winexec可能是在当前目录下执行,因此可能正确。
    shellexecute需要指定运行目录,默认是nil,这个时候指向的可能和winexec方式指定的运行路径。