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; |
Не правда ли просто?
Автор: Горбань С.В.
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!