winexec
shellexecute
createprocess
都可以,最好还是createprocess,可以运行并等待一个程序结束,
winexec、shellexecute都比较简单,createprocess示例:
function WinExecAndWait32_v1(FileName: string; Visibility: integer):
Cardinal;                               {integer}
var
  zAppName: array[0..512] of char;
  zCurDir: array[0..255] of char;
  WorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName, FileName);
  GetDir(0, WorkDir);
  StrPCopy(zCurDir, WorkDir);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName,               { pointer to command line string }
    nil,                    { pointer to process security attributes }
    nil,                    { pointer to thread security attributes }
    true,                   { handle inheritance flag }
    CREATE_NEW_CONSOLE or   { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil,                    { pointer to new environment block }
    nil,                    { pointer to current directory name, PChar}
    StartupInfo,            { pointer to STARTUPINFO }
    ProcessInfo)            { pointer to PROCESS_INF }
    then Result := INFINITE {-1} else
  begin
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
    CloseHandle(ProcessInfo.hProcess);  { to prevent memory leaks }
    CloseHandle(ProcessInfo.hThread);
  end;
end;

解决方案 »

  1.   

    winexec
    shellexecute
    createprocess
    都可以,最好还是createprocess,可以运行并等待一个程序结束,
    winexec、shellexecute都比较简单,createprocess示例:
    function WinExecAndWait32_v1(FileName: string; Visibility: integer):
    Cardinal;                               {integer}
    var
      zAppName: array[0..512] of char;
      zCurDir: array[0..255] of char;
      WorkDir: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,
        zAppName,               { pointer to command line string }
        nil,                    { pointer to process security attributes }
        nil,                    { pointer to thread security attributes }
        true,                   { handle inheritance flag }
        CREATE_NEW_CONSOLE or   { creation flags }
        NORMAL_PRIORITY_CLASS,
        nil,                    { pointer to new environment block }
        nil,                    { pointer to current directory name, PChar}
        StartupInfo,            { pointer to STARTUPINFO }
        ProcessInfo)            { pointer to PROCESS_INF }
        then Result := INFINITE {-1} else
      begin
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess, Result);
        CloseHandle(ProcessInfo.hProcess);  { to prevent memory leaks }
        CloseHandle(ProcessInfo.hThread);
      end;
    end;
      

  2.   

    WinExec;
    ShellExecute;
    参数看看帮助吧
      

  3.   

    哈哈,来晚了,TCXHL(随风逝去) 已经答了
      

  4.   

    uses ShellapiShellExecute(Handle,'Open','test.exe',nil,nil,SW_SHOWNORMAL);
      

  5.   

    winexec
    shellexecute
    createprocess
    都可以,最好还是createprocess,可以运行并等待一个程序结束,
    winexec、shellexecute都比较简单,createprocess示例:
    function WinExecAndWait32_v1(FileName: string; Visibility: integer):
    Cardinal;                               {integer}
    var
      zAppName: array[0..512] of char;
      zCurDir: array[0..255] of char;
      WorkDir: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,
        zAppName,               { pointer to command line string }
        nil,                    { pointer to process security attributes }
        nil,                    { pointer to thread security attributes }
        true,                   { handle inheritance flag }
        CREATE_NEW_CONSOLE or   { creation flags }
        NORMAL_PRIORITY_CLASS,
        nil,                    { pointer to new environment block }
        nil,                    { pointer to current directory name, PChar}
        StartupInfo,            { pointer to STARTUPINFO }
        ProcessInfo)            { pointer to PROCESS_INF }
        then Result := INFINITE {-1} else
      begin
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess, Result);
        CloseHandle(ProcessInfo.hProcess);  { to prevent memory leaks }
        CloseHandle(ProcessInfo.hThread);
      end;
    end;