Запуск CMD

suzuki-bandit
Дата: 14.10.2019 12:59:39
Добрый деньЕсть строка запуска
"C:\Program Files (x86)\pgAdmin III\1.16\\pg_dump.exe" --host "192.168.15.50"  --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "D:\old.backup" "gilev"


Которую я генерируют
Var
Checket:integer;
begin
ini_file := TIniFile.Create('config.ini');
StatusBar1.Panels[1].Text:=((ExtractFilePath(Application.ExeName) + 'config.ini'));
try
host.Text:= ini_file.ReadString('conf', 'host','127.0.0.1');
port.Text:= ini_file.ReadString('conf', 'port','5432');
username.Text:= ini_file.ReadString('conf', 'username','5432');
role.Text:= ini_file.ReadString('conf', '=role','postgres');
BD.Text:= ini_file.ReadString('conf', 'BD','Base');
SaveToFile.Text:= ini_file.ReadString('conf', 'file','C:\')+BD.Text+'_'+FormatDateTime('dd.mm.yyyy', Now)+'.backup';
Checket:=StrToInt(ini_file.ReadString('conf', 'Select','0'));
finally
ini_file.Free
end;
If Checket = 0  then
begin
CheckBox1.Checked:=false;
Button1.Enabled:=true;
end
else
begin
CheckBox1.Checked:=true;
Button1.Enabled:=false;
end


Как запустить данную с троку в CMD , что б результат выполнения отображался в memo???
Спасибо
Dimitry Sibiryakov
Дата: 14.10.2019 13:01:20

suzuki-bandit
Как запустить данную с троку в CMD , что б результат выполнения отображался в memo???

CreateProcess()

Posted via ActualForum NNTP Server 1.5

suzuki-bandit
Дата: 14.10.2019 13:10:42
Dimitry Sibiryakov,
А как отобразить результат в memo????
Мимопроходящий
Дата: 14.10.2019 13:11:26

function Win32ExecAndWait(const CommandLine, Directory:
string; out OutputString: string): integer;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  PDirectory: PChar;
  BytesRead: Cardinal;
begin
  Result := -1;
  OutputString := '';
  if Directory = '' then
    PDirectory := nil
  else
    PDirectory := PChar(Directory);

  FillChar(SA, SizeOf(SA), 0);
  FillChar(SI, SizeOf(SI), 0);

  with SA do
    begin
      nLength := SizeOf(SA);
      bInheritHandle := True;
      lpSecurityDescriptor := nil;
    end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
      begin
        cb := SizeOf(SI);
        dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
        wShowWindow := SW_HIDE;
        hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
        hStdOutput := StdOutPipeWrite;
        hStdError := StdOutPipeWrite;
      end;
    if not CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
      nil, nil, True, 0, nil, PDirectory, SI, PI) then
      Result := -1
    else
      begin
        CloseHandle(StdOutPipeWrite);
        try
          repeat
            WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
            if BytesRead > 0 then
              begin
                Buffer[BytesRead] := #0;
                OutputString := OutputString + Buffer;
              end;
          until not WasOK or (BytesRead = 0);
          WaitForSingleObject(PI.hProcess, INFINITE);
          GetExitCodeProcess(PI.hProcess, Cardinal(Result));
        finally
          CloseHandle(PI.hThread);
          CloseHandle(PI.hProcess);
        end;
      end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;

Posted via ActualForum NNTP Server 1.5

suzuki-bandit
Дата: 14.10.2019 13:15:35
Мимопроходящий,
а использовать данную функцию как?
Dimitry Sibiryakov
Дата: 14.10.2019 13:16:39

suzuki-bandit
а использовать данную функцию как?

Разобрать на запчасти, прочесть в справке что и как делает каждая функция, намотать на ус.

Posted via ActualForum NNTP Server 1.5

Мимопроходящий
Дата: 14.10.2019 13:36:52

14.10.2019 13:15, suzuki-bandit пишет:
> а использовать данную функцию как?

ой-йоооо...
имхо, тут программист нужен.

Posted via ActualForum NNTP Server 1.5

suzuki-bandit
Дата: 15.10.2019 10:33:54
Что не так делаю??

[quote автор]
var
start:string;
RC: Cardinal;
 WorkDir :String;   

   WorkDir := ExtractFilePath(Application.ExeName);
   Memo1.Lines.Text := GetDosOutput( 'cmd /c '+start, WorkDir, Rc );
   ShowMessage( ' Отладка: Код результата = '+IntToStr(R[/quote]
wadman
Дата: 15.10.2019 10:38:32
suzuki-bandit
Что не так делаю??

Как минимум кавычки забыты в командной строке у длинного пути.
suzuki-bandit
Дата: 15.10.2019 10:51:07
wadman,

Подскажите как правильно расставить ковычки???