Войти

Показать полную графическую версию : [решено] Инсталляция программы


interminable
20-01-2016, 14:22
Есть папка с 3-мя файлами
1.exe
2.cfg
3.txt

Нужен bat файл, который запустит 1.ехе проинсталлирует программу, затем скопирует в созданную после инсталляции директорию файлы 2 и 3.

alpap
20-01-2016, 20:06
Если "1.exe" инсталлируется самостоятельно, без вмешательства (и процесс завершается) и известен путь и папка, которую он создает, можно так:

@echo on
set "in=papka_in"
set "out=papka_out"
set "p=1.exe"
start "" "%in%\1.exe"
cmd /c for /l %%i in () do for /f delims^^=^^" %%j in ('tasklist /fi "imagename eq %p%" /fo csv /nh') do if not "%%j"=="%p%" (if exist "%out%" (copy /y "%in%\2.cfg" "%out%" & copy /y "%in%\3.txt" "%out%")) & exit
.

alpap
20-01-2016, 20:32
Или так, при тех же условиях выше:

@echo on
set "in=papka_in"
set "out=papka_out"
start /b /wait "" "%in%\1.exe"
if exist "%out%" (copy /y "%in%\2.cfg" "%out%" & copy /y "%in%\3.txt" "%out%")
exit
.

Iska
20-01-2016, 21:23
Или так, »
Не «или» а только так. Со «start» и без «/wait» не будет никакого «после инсталляции», а именно что «сразу».

alpap
21-01-2016, 09:47
for /l %%i in () do » с этим будет, тем более я проверял перед тем как выложить.
Да, инсталляция пройдет, папка будет создана и как только процесс пропадет, скопируются файлы (с заменой, если такие будут), чем по ТЗ не так.

gora
21-01-2016, 12:37
Не «или» а только так. »
Полностью согласен, но замечу, что даже наличие /wait не решает проблему на 100%.
Например, если 1.exe запустит родительский процесс, который распаковывает основной установщик во временную папку, а затем завершает процесс 1.exe и запускает дочерний процесс собственно установщика. В этом случае копирование может произойти в эту временную щель между двумя процессами и нужная для копирования папка еще не будет создана.

alpap
21-01-2016, 17:36
не решает проблему на 100% », можно еще кучу подводных камней найти, просто проводить инсталляцию как минимум с помощью cmd - по-моему перебор (и софта хватает по этой части вплоть до полного автомата)

Iska
21-01-2016, 23:34
но замечу, что даже наличие /wait не решает проблему на 100%.
Например, если 1.exe запустит родительский процесс, который распаковывает основной установщик во временную папку, а затем завершает процесс 1.exe и запускает дочерний процесс собственно установщика. В этом случае копирование может произойти в эту временную щель между двумя процессами и нужная для копирования папка еще не будет создана. »
Именно так :).




© OSzone.net 2001-2012