我有一个Test.bat,在命令行下可以顺利执行,但是在程序中使用ShellExecute函数执行时,只是有一个DOS窗口闪了一下就没有了,不知道是什么原因,代码如下:
ShellExecute(Self.handle,'c:\test.bat',nil,nil,SW_SHOWNORMAL)
函数返回值是42。
test.bat如下:
@echo off
cls
rem call the preprocessor program
call v_pre16 /u:DFLT /cdrom /run:9510AV11
rem if any problems abort else run view
if errorlevel 1 goto end
   call v_view16.exe /u:DFLT /cdrom /run:9510AV11
:end
echo.
echo.

解决方案 »

  1.   

    找到问题原因了,使用程序执行目录是应用程序所在的目录,在这个目录下 无法调用v_pre16和v_view16.exe,而test.bat文件与v_pre16和v_view16.exe程序在同一目录下,所以直接以运行test.bat文件就能顺利执行。
    但是载文解决这个问题呢?
    在调用ShellExecute函数之前,是否能够设置一下执行目录呢?
      

  2.   

    假设BAT文件在C:\下.两种简单方法:1.调用`SetCurrentDirectory()函数;如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      OldPath: PChar;
      NewPath: String;
    begin
      NewPath := 'c:\';
      SetCurrentDirectory( PChar(NewPath) );
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShellExecute(0,nil,PChar('test.exe'),nil,nil,SW_SHOWNORMAL);
    end;2,直接在倒数第二个参数设置路径
    ShellExecute(0,nil,PChar('test.exe'),nil,'c:\',SW_SHOWNORMAL);
      

  3.   

    可以在bat里加上 set path=%path%;c:\aaa;c:\bbbc:\aaa和c:\bbb为你的执行文件的存储目录
      

  4.   

    或者直接使用winexec分别调用你那些执行文件