Содержание материала

Code:

function TChildProc.ReadStrFromChild(Timeout: Integer): string;

var

i: Integer;

dwRead, BufSize, DesBufSize: DWORD;

chBuf: PChar;

Res: Boolean;

begin

try

   BufSize := 0;

   New(chBuf);

   repeat

     for i := 0 to 9 do

     begin

       Res := PeekNamedPipe(FChildStdoutRd, nil, 0, nil, @DesBufSize, nil);

       Res := Res and (DesBufSize > 0);

       if Res then

         Break;

       Sleep(Round(Timeout / 10));

     end;

     if Res then

     begin

       if DesBufSize > BufSize then

       begin

         FreeMem(chBuf);

         GetMem(chBuf, DesBufSize);

         BufSize := DesBufSize;

       end;

       Res := ReadFile(FChildStdoutRd, chBuf^, BufSize, dwRead, nil);

       Result := Result + LeftStr(chBuf, dwRead);

     end;

   until not Res;

except

   Result := 'Read Err';

end;

end;

 

Ну, вот, как я и говорил - работает. Даже слишком хорошо. Как я и говорил - эта вся бодяга для Web сервера. Ну, беру я в качестве файла - format.exe.... Ндаааа....

 

Если честно - с format'ом я не прверял - а вот help c парметрами и "net use" прошли на ура! Так что пришлось резко думать, как ограничить список разрешенных для запуска программ....

 

В общем, кому лень разбираться - вот вам исходники модуля с готовым классом. А вот пример его использования:

Code:

with TChildProc.Create(ReadIni(TagParams.Values['file'], FPage),

TagParams.Values['cmd']) do

try

   WriteToChild(TagParams.Text);

   ReplaceText := ReadStrFromChild;

finally

   Free;

end;

  

Не правда ли просто?

 

Автор: Горбань С.В.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить