![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый день!
Нужно написать утилиту, которая будет при нажатии кнопки устанавливать программы по списку из ini-файла. Пример содержания файла: [soft] 7zip=7zip\7z.exe WinRAR=winrar\setup.exe При нажатии кнопки установки, утилита должна читать ini-файл, а затем, следуя списку, запускать по очереди инсталляторы. При этом хочется, чтобы это происходило в отдельном потоке, основная программа была бы доступна, и имелась возможность прервать процесс установки по нажатию соответствующей кнопки. Собственно, вопрос: как правильно считать значения ключей из секции ini-файла и запихнуть их в CreateProcess, снабдив все это отдельным потоком? Последний раз редактировалось nerZEROn, 23.12.2013 в 13:25. |
#2
|
||||
|
||||
![]() Цитата:
CreateProcess используешь примерно так: Код:
Для создания отдельного потока, используй BeginThread или создавай своего потомка от TThread или можешь использовать дополнительные компоненты - просто бросаешь такую компоненту на форму и задаёшь ей нужные обработчики событий. Например в библиотеке RxLib есть такая компонента, или вот здесь есть подобная (TBMDThread). |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nerZEROn (23.12.2013)
|
#3
|
||||
|
||||
![]() А можно поподробнее по поводу цикла и считывания через ReadString? Я не особо хорошо в этом разбираюсь
![]() |
#4
|
||||
|
||||
![]() Цитата:
Код:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nerZEROn (26.12.2013)
|
#5
|
||||
|
||||
![]() Цитата:
На этом этапе получаю сообщения типа 'Для установки "7Zip" запускаем "???"'. Выходит, Value не считывается? А нет, нашел свой косяк ![]() Последний раз редактировалось nerZEROn, 26.12.2013 в 13:22. |
#6
|
||||
|
||||
![]() Итак, я пришел к такому обработчику кнопки "Установить":
Код:
В целом программа работает исправно: читает ini и запускает по порядку дистрибутивы программ с параметрами. Но снова столкнулся с проблемой. Гуглил пол дня, копался в примерах и исходниках, но так и не понял, как вывести это все в отдельный поток. Также, я не смог найти никакой документации к компоненту BMDThread. Поскольку приложение будет выполнять у меня по несколько функций сразу, жизненно необходимо, чтобы основная форма была доступна во время инсталляции сторонних программ. |
#7
|
||||
|
||||
![]() Цитата:
В событии OnExecute у BMDThread пиши то, что должно выполняться в отдельном потоке (thread), а для запуска потока просто вызови например по нажатию кнопки метод Start: Код:
|
#8
|
||||
|
||||
![]() Цитата:
|
#9
|
||||
|
||||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Цитата:
Код:
Запихнул в процедуру код на инсталляцию и ура! Приложение не виснет во время выполнения ![]() |