- Код: Выделить всё
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?