我用API函数ShellExecute调用EXE文件,并且在调用的过程中打开相关文件。现有如下代码://调用 micaps 2.0
ShellExecute(0, PAnsiChar('open'),
             PAnsiChar('C:\MICAPS2\micaps20\MICAPS20.EXE'),
             PAnsiChar('"H:\code\PARA1.DAT"  "C:\Program Files\ZHT\CLOUD.ZHT"'),
             PAnsiChar('C:\MICAPS2\micaps20\'),
             SW_SHOW) ;//调用 micaps 1.0
ShellExecute(0, PAnsiChar('open'),
             PAnsiChar('H:\code\MICAPS.EXE'),
             PAnsiChar('"H:\code\PARA1.DAT"  "C:\Program Files\ZHT\CLOUD.ZHT"'),
             PAnsiChar('H:\code\'),
             SW_SHOW) ;在调用 micaps 2.0 的时候,可以正常调用并打开相关文件,但在调用 micaps 1.0 的时候会出现找不到文件“C:\Program ”。根据ShellExecute的资料称“ PAnsiChar('"H:\code\PARA1.DAT"  "C:\Program Files\ZHT\CLOUD.ZHT"') ”一句为传递的参数,各参数要用空格分开。但为什么在调用 micaps 2.0 的时候可以,但在micaps 1.0 的时候却不行。 为什么???
难道还和具体的可执行文件有关么?????请高手指点!  谢谢!   :)
  

解决方案 »

  1.   

    有可能是MICAPS.EXE解释命令行有问题哦~~
    DOS时代是没有空格文件名的~~
    回到原始时代看看:
    ShellExecute(0, PAnsiChar('open'),
                 PAnsiChar('H:\code\MICAPS.EXE'),
                 PAnsiChar('"H:\code\PARA1.DAT"  "C:\Progra~1\ZHT\CLOUD.ZHT"'),
                 PAnsiChar('H:\code\'),
                 SW_SHOW) ;
      

  2.   

    to : zswangII(伴水清清)(一贴不灌,何以灌天下?) 不可以那样的!其实,在我的程序中,参数的路径是“活”的,根据不同的情况,也可能是其他的路径参数(或许在其中包括有空格)。但为什么就是不行呢???
    是不是才用 ShellExecute 时,还跟具体调用的EXE文件有关???
    请高手继续赐教!
      

  3.   

    你就说这样调试通不?~~行得通再出方案~~begin
      ShellExecute(Handle, nil,
        PAnsiChar('H:\code\MICAPS.EXE'),
        PAnsiChar(
          Format('%s %s', [
             ExtractShortPathName('H:\code\PARA1.DAT'),
             ExtractShortPathName('C:\Program Files\ZHT\CLOUD.ZHT')]
          )
        ),
        PAnsiChar('H:\code\'),
        SW_SHOW) ;
    end;
      

  4.   

    TO zswangII(伴水清清)(一贴不灌,何以灌天下?) 应该是你说的!现在通过 ExtractShortPathName 把长路径名转换为8。3的格式,程序可以启动,但是在程序启动以后,没有达到预期的效果。有的参数文件在EXE启动的时候并没有执行。比如下面的代码:ShellExecute(0, PAnsiChar('open'),
                 PAnsiChar('H:\code\MICAPS.EXE'),
                 PAnsiChar('H:\code\PARA1.DAT H:\code\LAMBERTM.DAT C:\Progra~1\ZHT\CLOUD.ZHT'),
                 PAnsiChar('H:\code\'),
                 SW_SHOW) ;
    程序可以正常启动,但是在启动后,只执行了第1个参数(H:\code\PARA1.DAT)和第2个参数(H:\code\LAMBERTM.DAT),第3个参数(C:\Progra~1\ZHT\CLOUD.ZHT)并没有被执行
    !!! 这是为什么??? 
        是不是如你说的 “不仅要看操作系统,还要看具体程序”!在我的例子里,是不是有可能micaps.exe只能执行2个参数,多出的就没有办法识别? 但在我的程序中,非得要同时执行那3个参数才能达到目的。这如何是好?
        还有,我发现,各参数的位置很重要,否则在EXE文件启动的时候会出错。能否讲解一下关于这方面的知识?
        谢谢!  :)
      

  5.   

    用快捷方式就可以测试MICAPS.EXE的参数对不对~~情况又不多,觉得是参数次序问题就调换一下测试,觉得是路径问题就改一下路径~~每个程序的参数又不一样,都是些约定的格式,没什么知识可言~~多测试少问~~