Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2012, 16:26   #11
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
http://yandex.ua/yandsearch?text=Exe...mdoc=10&lr=143
Когда-то тоже интересовался.

Код:
procedure ExecConsoleApp(CommandLine: AnsiString; Output: TStringList; Errors:
  TStringList);
var
  sa: TSECURITYATTRIBUTES;
  si: TSTARTUPINFO;
  pi: TPROCESSINFORMATION;
  hPipeOutputRead: THANDLE;
  hPipeOutputWrite: THANDLE;
  hPipeErrorsRead: THANDLE;
  hPipeErrorsWrite: THANDLE;
  Res, bTest: Boolean;
  env: array[0..100] of Char;
  szBuffer: array[0..256] of Char;
  dwNumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  sa.nLength := sizeof(sa);
  sa.bInheritHandle := true;
  sa.lpSecurityDescriptor := nil;
  CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
  CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
  ZeroMemory(@env, SizeOf(env));
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow := SW_HIDE;
  si.hStdInput := 0;
  si.hStdOutput := hPipeOutputWrite;
  si.hStdError := hPipeErrorsWrite;

  (* Remember that if you want to execute an app with no parameters you nil the
     second parameter and use the first, you can also leave it as is with no
     problems.                                                                 *)
  Res := CreateProcess(nil, pchar(CommandLine), nil, nil, true,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, @env, nil, si, pi);

  // Procedure will exit if CreateProcess fail
  if not Res then
  begin
    CloseHandle(hPipeOutputRead);
    CloseHandle(hPipeOutputWrite);
    CloseHandle(hPipeErrorsRead);
    CloseHandle(hPipeErrorsWrite);
    Exit;
  end;
  CloseHandle(hPipeOutputWrite);
  CloseHandle(hPipeErrorsWrite);

  //Read output pipe
  Stream := TMemoryStream.Create;
  try
    while true do
    begin
      bTest := ReadFile(hPipeOutputRead, szBuffer, 256, dwNumberOfBytesRead,
        nil);
      if not bTest then
      begin
        break;
      end;
      Stream.Write(szBuffer, dwNumberOfBytesRead);
    end;
    Stream.Position := 0;
    Output.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;

  //Read error pipe
  Stream := TMemoryStream.Create;
  try
    while true do
    begin
      bTest := ReadFile(hPipeErrorsRead, szBuffer, 256, dwNumberOfBytesRead,
        nil);
      if not bTest then
      begin
        break;
      end;
      Stream.Write(szBuffer, dwNumberOfBytesRead);
    end;
    Stream.Position := 0;
    Errors.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;

  WaitForSingleObject(pi.hProcess, INFINITE);
  CloseHandle(pi.hProcess);
  CloseHandle(hPipeOutputRead);
  CloseHandle(hPipeErrorsRead);
end;
Вылетает с еррором на память не может создать процес ...
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 10.08.2012, 10:35   #12
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

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

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

Код:
function RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
var
  start: TStartupInfo;
  procInfo: TProcessInformation;
  tmpName: string;
  tmp: winapi.Windows.THandle;
  tmpSec: TSecurityAttributes;
  res: TStringList;
  return: Cardinal;
begin
  Result := False;
  try
    { Setze ein Temporares File }
    { Set a temporary file }
    tmpName := 'Test.tmp';
    FillChar(tmpSec, SizeOf(tmpSec), #0);
    tmpSec.nLength := SizeOf(tmpSec);
    tmpSec.bInheritHandle := True;
    tmp := winapi.Windows.CreateFile(PChar(tmpName),
           Generic_Write, File_Share_Write,
           @tmpSec, Create_Always, File_Attribute_Normal, 0);
    try
      FillChar(start, SizeOf(start), #0);
      start.cb          := SizeOf(start);
      start.hStdOutput  := tmp;
      start.dwFlags     := StartF_UseStdHandles or StartF_UseShowWindow;
      start.wShowWindow := SW_Minimize;
      { Starte das Programm }
      { Start the program }
      if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,
                       0, nil, PChar(_dirName), start, procInfo) then
      begin
        SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
        WaitForSingleObject(procInfo.hProcess, Infinite);
        GetExitCodeProcess(procInfo.hProcess, return);
        Result := (return = 0);
        CloseHandle(procInfo.hThread);
        CloseHandle(procInfo.hProcess);
        winapi.Windows.CloseHandle(tmp);
        { Die Ausgaben hinzufugen }
        { Add the output }
        res := TStringList.Create;
        try
          res.LoadFromFile(tmpName);
          form1.Memo1.Lines.AddStrings(res);
        finally
          res.Free;
        end;
        winapi.Windows.DeleteFile(PChar(tmpName));
      end
      else
      begin
        Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
          'RunCaptured Error', MB_OK);
      end;
    except
      winapi.Windows.CloseHandle(tmp);
      winapi.Windows.DeleteFile(PChar(tmpName));
      raise;
    end;
  finally
  end;
end;


procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  RunCaptured('C:\', 'g:\php\php.exe', 'g:\webik\www\script.php');
end;
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 10.08.2012, 11:35   #13
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Может никому и не интересно но я пока еще пофлужу

Не сразу до меня дошло, на ПХП, есть код именно для консольного приложения, тоесть мне надо было не в Delphi код править, а код в PHP скрипте подправить. Я получил то что мне надо подправив php script таким образом

Код:
<?php 
parse_str($argv[1]);
echo "Name, $name"; 
?>

Спасибо еще раз за ссылки, как и думал, их значимость я пойму со временем.

в результате я по запросу
Код:
http://127.0.0.1:81/script.php?name=Oleg
получаю ответ

Цитата:
Name, Oleg
правда получаю его в мемо1 ... но это мелочи перенаправить труда не составить.


Последний шаг моего задание подключить MySQL и выполнить там запрос.

Просьба тему не закрывать ... хоть и вопрос остался только по пхп.

Спасибо.
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 10.08.2012, 17:10   #14
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Ну вообщем проблем особо не возникло.

при помощи MySQL5 была создана база.
При настроенном PHP и Интернете, проблем написать запрос базе не возникло.
При получение ответа не много не понял ... но вывел то, что надо.
большой пробел в ПХП ... ибо обработка происходит именно там.

ПыСы параметры в командную строку к пхп скрипту передаются
Код:
php.exe script.php "$param1=123$param2=321"

ну вроде все что надо было сделал. пора учить пхп )
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinSock2. Клиент-сервер на Delphi XE2. Проблема компиляции WestDragon Работа с сетью в Delphi 4 07.06.2013 11:03
string rad studio redenemy C++ Builder 3 31.05.2012 08:24
Создание форм в Embarcadero RAD Studio XE2 ВалекFCRK Общие вопросы Delphi 6 09.03.2012 15:17
эффект "замерзания" RAD XE2 countteran Компоненты Delphi 5 05.02.2012 20:44
Rad Studio 2010 crusaderx2 Общие вопросы Delphi 4 16.03.2011 12:49