例如:
    winexec('net stop MSSQLSERVER',SW_HIDE)
怎么判断命令行执行完毕?

解决方案 »

  1.   

    用你这样的方式恐怕不好判断。用CreateProcess或ShellExecuteEx函数。
      

  2.   

    可以的。
    function WinExecExW(CommandLine: Pointer): DWORD; stdcall;
    var
      WorkDir: Pchar;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      //执行一个外部程序并等待其执行结束
      WorkDir:=PChar(ExtractFilePath(string(PChar(CommandLine))));  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
      StartupInfo.cb := SizeOf(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_SHOWNORMAL;
      if not CreateProcess(nil,
                           PChar(CommandLine),
                           nil,
                           nil,
                           False,
                           CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                           nil,
                           WorkDir,
                           StartupInfo,
                           ProcessInfo) then
        raise Exception.Create('进程创建失败!')
      else
      begin
          WaitForSingleObject(Processinfo.hProcess, INFINITE);
          GetExitCodeProcess(ProcessInfo.hProcess, Result);
      end;
    end;