Показать сообщение отдельно
  #6  
Старый 26.12.2013, 19:03
Аватар для nerZEROn
nerZEROn nerZEROn вне форума
Прохожий
 
Регистрация: 23.12.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Итак, я пришел к такому обработчику кнопки "Установить":

Код:
procedure TForm1.btn_instClick(Sender: TObject);
var
   ini: TMemIniFile;
   sl: TStrings;
   i: Integer;
   Ident, Value: String;
   SI: TStartupInfo;
   PI: TProcessInformation;
begin
   ini := TMemIniFile.Create('install.ini');
   FillChar(SI, SizeOf(SI), 0);
   SI.cb := SizeOf(SI);
   SI.wShowWindow := SW_NORMAL;
   SI.dwFlags := STARTF_USESHOWWINDOW;
   try
    sl := TStringList.Create;
    try
      ini.ReadSection('soft', sl);
      for i := 0 to sl.Count - 1 do
      begin
        Ident := sl[i];
        Value := ini.ReadString('soft', Ident, '');       
        if CreateProcess(PChar(Ident), PChar(' ' + Value), nil, nil, False, 0, nil, nil, SI, PI) then
          try
           while True do
            begin
             if (WaitForSingleObject(PI.hProcess, 100) <> WAIT_TIMEOUT) then Break;
            end;
           finally
            CloseHandle(PI.hProcess);
            CloseHandle(PI.hThread);
        end;
      end;
    finally
      sl.Free;
    end;
  finally
    ini.Free;
  end;
end;

В целом программа работает исправно: читает ini и запускает по порядку дистрибутивы программ с параметрами.
Но снова столкнулся с проблемой. Гуглил пол дня, копался в примерах и исходниках, но так и не понял, как вывести это все в отдельный поток. Также, я не смог найти никакой документации к компоненту BMDThread. Поскольку приложение будет выполнять у меня по несколько функций сразу, жизненно необходимо, чтобы основная форма была доступна во время инсталляции сторонних программ.
Ответить с цитированием