- Код: Выделить всё
- proc := TProcess.Create(Self);
 if inputText = '' then
 proc.Options := proc.Options + [poWaitOnExit, poUsePipes]
 else
 proc.Options := proc.Options + [poUsePipes];
 proc.CommandLine := cmd;
 try
 proc.Execute;
 if inputText <> '' then
 begin
 strl.Clear;
 strl.Add(inputText);
 strl.SaveToStream(proc.Input);
 strl.Clear;
 proc.CloseInput;
 while proc.Running do
 begin
 if resFromStderr then
 strl.LoadFromStream(proc.Stderr)
 else
 strl.LoadFromStream(proc.Output);
 buf := buf + strl.Text;
 strl.Clear;
 end;
 end
 else
 begin
 if resFromStderr then
 strl.LoadFromStream(proc.Stderr)
 else
 strl.LoadFromStream(proc.Output);
 buf := buf + strl.Text;
 end;
 finally
 proc.Free;
 end;
Под Linux все работает отлично.
Под Windows (семерка) при вызове Execute появляется посторонняя консоль и выполнение программы блокируется пока ее вручную не закроешь. Пробовал использовать poNoConsole в опциях, но тогда почему-то не появляется даже главное окно приложения. Хотя видно что само приложение запускается (по иконке в трэе и в диспетчере задач).
Помогите, пожалуйста, куда смотреть и что крутить что-бы TProcess в Windows работал как полагается.
Добавлено спустя 14 часов 54 минуты 5 секунд:
Когда поставил poNoConsole и убрал poWaitOnExit оно, вроде, заработало. Но не полностью.
Теперь программа один раз отрабатывает на --list-keys нормально, а вот при необходимости передать на вход данные и получить ответ возникает проблема. Возможно у TProcess есть какие-то особенности в этом случае при использовании в Windows?






