Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для vavun

Пользователь


Сообщения: 55
Благодарности: 26

Профиль | Отправить PM | Цитировать


Еще один вопрос. Но тут интерес больше спортивный, чем практический

Длиннопост
Допустим:

Имеется main.bat, который запускается модулем после распаковки.

config.txt
Код: Выделить весь код
;!@Install@!UTF-8!
BeginPrompt="Install this program?"
FinishMessage="Done"
RunProgram="hidcon:waitall:main.bat"
;!@InstallEnd@!
main.bat
Код: Выделить весь код
@echo off
SetLocal EnableExtensions

REM В процессе работы скрипта создаются некоторые переменные,
REM которые должны быть перезадны двум консольным программам.
REM При этом работа данного скрипта должна быть продолжена
REM без ожидания завершения консольных пррограмм и вне зависимости
REM от результатов выполения этих программ.

set /a var1=2+2
start "First" cmd /c "Console_1.bat %var1%"

set /a var2=4+6
start "Second" cmd /c "Console_2.bat %var2%"

REM тем временем работа основного скрипта продолжается
timeout 3
echo.Result: Any text >%UserDesktop%\main.txt

exit /b
В процессе сложной и кропотливой работы main.bat создаются некоторые переменные, которые должны быть переданы двум консольным программам (в данном случае Console_1.bat и Console_2.bat)
Так что еще одним RunProgram не отделаться (или я просто не знаю как)
И работа всех трех (main.bat, Console_1.bat и Console_2.bat) должна продолжиться параллельно и независимо друг от друга

Console_1.bat
Код: Выделить весь код
@echo off
SetLocal EnableExtensions

REM имитация бурной деятельности
timeout 10
echo.The arguments is: %* >>%UserDesktop%\Console_1.txt
exit /b
Console_2.bat
Код: Выделить весь код
@echo off
SetLocal EnableExtensions

REM имитация бурной деятельности
timeout 7
echo.The arguments is: %* >>%UserDesktop%\Console_2.txt
exit /b
В результате все работает хорошо, модуль дожидается завершения всех дочерних процессов и после этого рапортует "Done", но появляются консольные окна условных консольных программ Console_1.bat и Console_2.bat, так как hidcon: на них уже не действует.



Вопрос1: как скрыть эти консольные окна средствами модуля? (при этом не распаковывая sfx.exe заново) Console_1.bat и Console_2.bat обязательно должны быть запущены из main.bat, чтобы можно было передать им переменные созданные main.bat в качестве аргументов
и
Вопрос2: Как можно передать модулю некую переменную полученную в результате работы запущенной им программы из предыдущего RunProgram, для использования её в следующем по порядку RunProgram ?
Пример:
Код: Выделить весь код
RunProgram="main.bat"
RunProgram="prog2.exe %main.bat_result%"
На данный момент пришло в голову только создание следующего костыля:
Скрытый текст
В конфигурационном файле объявляется переменная содержащая полный путь к sfx.exe
Допустим так
SetEnvironment="WRAP=%%S//%%M"

config.txt
Код: Выделить весь код
;!@Install@!UTF-8!
BeginPrompt="Install this program?"
FinishMessage="Done"
SetEnvironment="WRAP=%%S//%%M"
RunProgram="hidcon:waitall:main.bat"
;!@InstallEnd@!

Вызов Console_1.bat и Console_2.bat из main.bat происходит следующим образом:

Код: Выделить весь код
start "" "%WRAP%" -sfxwaitall:1 cmd /c "Console_1.bat %var1%"
main.bat
Код: Выделить весь код
@echo off
SetLocal EnableExtensions

REM В процессе работы скрипта создаются некоторые переменные,
REM которые должны быть перезадны двум консольным программам.
REM При этом работа данного скрипта должна быть продолжена
REM без ожидания завершения консольных пррограмм и вне зависимости
REM от результатов выполения этих программ.

set /a var1=2+2
REM start "First" cmd /c "Console_1.bat %var1%"
start "" "%WRAP%" -sfxwaitall:1 cmd /c "Console_1.bat %var1%"


set /a var2=4+6
REM start "Second" cmd /c "Console_2.bat %var2%"
start "" "%WRAP%" -sfxwaitall:1 cmd /c "Console_2.bat %var2%"

REM тем временем работа основного скрипта продолжается
timeout 3
echo.Result: Any text >%UserDesktop%\main.txt

exit /b

Console_1.bat и Console_2.bat остаются без изменений и более не показывают консольные окна и переменные полученные в результате работы main.bat передаются далее.
sfx.exe как положено дожидается завершения последнего дочернего процесса и рапортует "Done".

Опять же хочу напомнить, что интерес больше спортивный, чем практический

Заранее благодарю за ответы

-------
What if ...?


Отправлено: 05:19, 03-02-2016 | #334