• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Indy Tcpserver

  • Автор темы Frodo
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Frodo

Задача: при получении команды от клиента сервер должен открыть в ворде документ.

Код:
uses
...Word2000,IdComponent, IdTCPServer....

procedure TMainForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
Ss:String;
DocName:OleVariant;
begin
DocName:='C:\boot.doc';
try
with AThread.Connection do
begin
 Ss:=ReadLn();
 if Ss='Get' then
 begin
  WordApplication1.Documents.Open(DocName,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
 end;
....

Проблема такая что при подключении клиента к серверу он создает поток.При получении команды от клиента сервер пытается внутри потока запустить еще один поток для открытия вордовского документа.

Как на время остановить или закрыть поток созданный сервером и передать управления для работы с вордом
 
Z

zubr

Код:
AThread.Suspend;//останавливаем поток
 WordApplication1.Documents.Open(DocName,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
AThread.Resume;//продолжаем выполнение потока
 
F

Frodo

попробовал но никаного эффекта. все что следует после

Код:
AThread.Suspend;

просто не выполняется. Может это какой то глюк Indy 8 (у меня эта версия стоит)

Можно ли из вне (не из OnExecute) вызвать Suspend? и если можно то как?
 
B

Barmutik

Лучше из потока ставить Ваше задание на открытие документа к примеру в основном потоке приложения и уже потом оттуда его брать и з очереди заданий и открывать...

А с другой стороны в чём проблема что Вы из потока клиента создаёте ещё один поток ?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!