Войти

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


Hegehog1989
28-12-2017, 20:43
Ребята, помогите пожалуйста, у нас на форуме никто в зуб ногой не умеет создавать и править такие скрипты.
В общем предисловие. Есть пакет дров проверенных и собранных с любовью) Специфика установки подразумевает несколько перезагрузок, и есть скрипт взятый от китайцев, который устанавливает все одной установкой. Разложили в 4 папки, получилось 4 скрипта.
Нужно чтобы был один главный скрипт, который запускал бы эти 4 скрипта с перезагрузками. Я не программист, примерно так себе это представляю.
скрипты уже есть, их просто нужно подправить.
ссылка на драйверпак 4pda (http://4pda.ru/forum/index.php?showtopic=722487&st=1200#entry52480856) файл Minimal Driver Pack Auto Install.7z

буду очень признателен если кто нибудь откликнется

alpap
29-12-2017, 00:54
Разложили в 4 папки »
зачем, а если надо то куда, это 4 пользователя в локалке?

Hegehog1989
29-12-2017, 01:25
при чем тут локалка, тупо разложили дрова в 4 папки, ну не ставятся они одновременно, нужны перезагрузки, нужен скрипт который делал новый скрипт в автозагрузке и потом грузил вторую, третью, четвертую папку, каждый раз после перезагрузки

ну или подхватила существующий который лежит в каждой папке с дровами, выполнила, и после перезагрузки переключилась на следующий

mwz
29-12-2017, 01:53
Hegehog1989, первый скрипт прописывает в раздел RunOnce реестра вызов второго (с полным путём, разумеется), исполняется и перезагружает компьютер.

После перезагрузки начинает исполняться второй скрипт, который прописывает в раздел RunOnce реестра вызов третьего (с полным путём, разумеется), исполняется и перезагружает компьютер.

После перезагрузки начинает исполняться третий скрипт, который прописывает в раздел RunOnce реестра вызов четвёртого (с полным путём, разумеется), исполняется и перезагружает компьютер.

И т.д. Последний скрипт в RunOnce ничего не прописывает.

Всё это может быть выполнено одним скриптом: как вариант, с метками перехода. При этом каждый блок, находящийся между метками, сначала в прописывает в RunOnce вызов этого же скрипта с параметром, равным метке следующего блока, типа:

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v <Cледующая_метка>/t REG_SZ /d """"%0""" <Cледующая_метка>"

и далее исполняет тело текущего блока скрипта с завершающей командой перехода на последнюю в скрипте метку :Reboot, содержащую команду перезагрузки, например:Reboot
REM Перезагрузка
SHUTDOWN.EXE -r -t 20
которая стоит сразу после последнего блока.
В последнем блоке скрипта в RunOnce ничего не пишется.

Ну а в самом начале всего скрипта ставится (после команды setlocal) команда перехода на метку, например
IF NOT "%1"=="" goto %1

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

Iska
29-12-2017, 02:23
Скрипт может быть и один (и так будет даже лучше), а вот вызовы указываются с параметром, по которому скрипт может судить, на каком из этапов он был вызван на исполнение, и что ему следует делать.

Update:
Всё это может быть выполнено одним скриптом: как вариант, с метками перехода. При этом каждый блок, находящийся между метками, сначала в прописывает в RunOnce вызов этого же скрипта с параметром, равным метке следующего блока, типа: »
Когда я уже научусь сначала дочитывать сообщение до конца, и только затем рваться в бой отвечать :(. Ну, пусть остаётся памятником очередной моей нетерпеливости.

Hegehog1989
29-12-2017, 08:30
Спасибо, будем пробовать

Сrack
29-12-2017, 09:49
Я не программист »Для не программистов есть готовые программы, где все просто делается. Последовательный запуск программ, в том чисте и батников, с поддержкой перезагрузки с последующим продолжением есть в MInstAll.

Porsche-928
29-12-2017, 12:56
Всё это может быть выполнено одним скриптом »
Спасибо за помощь, будем пробовать :-)
Может ещё подскажите один момент.
Хочу в этот скрипт внести защиту "от дурака".
Чаще всего пользователи кидают папку куда хотят, из-за этого и возникает большинство проблем...
В скрипте использовал параметр пути "%~dp0", но смотрю в последней версии Win10 bild 1709 он перестал работать...

Если не получится с скриптом, то попробую ваш способ с MInstAll
Для не программистов есть готовые программы »

В любом случае спасибо за помощь :-)

mwz
29-12-2017, 14:00
Чаще всего пользователи кидают папку куда хотят, из-за этого и возникает большинство проблем... »

Если обратите внимание, в строке "REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce ...." стоит параметр %0 (в правильном для данной команды обрамлении из массы кавычек :) ), который передаёт имя скрипта, из которого он вызван, с полным путём. Т.е. куда бы вы скрипт не кинули — после перезагрузки его вызов будет обращён на тот же диск и в ту же папку, где он лежит.

Ну а уж скрипт должен следить за правильностью путей к тем файлам, которые он запускает — и это надо смотреть уже конкретно "по месту". И если все эти файлы находятся во вложенных по отношению к скрипту папках — не забыть прописать в нём после setlocal свою рабочую папку, путь и имя которой при [непонятных] проблемах с "%~dp0" (я надеюсь, слэша после этой переменной не стоит? Должно быть "%~dp0Команда" или "%~dp0.\Команда", а не "%~dp0\Команда ) скрипт может вытащить сам из того самого %0 — что надо делать, как и вообще определять все переменные, до команды IF NOT "%1"=="" goto %1.

Все строки, что я привёл, взяты из моего личного скрипта обновлений WinXP, который начинался с нескольких независимых скриптов, вызывающих последующие по самому первому моему варианту — но с увеличение количества обновлений я задолбадся отслеживать связи и пришёл к варианту единого скрипта, который после выпуска нерасчётных обновлений WinXP этого года стал содержать 15 блоков, выполняемых последовательно с перезагрузками — и не приходится задумываться, куда класть копию этой папки с полным комплектом на старенькие машины с ХР при необходимости их обновить.

А задержка в 20 секунд в метке :Reboot введена в т.ч. для того чтобы успеть при необходимости прервать перезагрузку, введя и выполнив команду "shutdown -a" :)

пусть остаётся памятником »
Я-то думал, что меня побьют за доморощенное решение — а тут такая квалифицированная поддержка! :)

Porsche-928
29-12-2017, 16:24
Я-то думал, что меня побьют за доморощенное решение — а тут такая квалифицированная поддержка! »
Спасибо.
Да в будущем можно конечно всё доработать, но для начало нужно чтоб хоть как-то заработало вообще :-)
Так что СПАСИБО!!!!

Porsche-928
06-01-2018, 17:59
Привет всем.
Спасибо за помощь , всё получилось :-)
Хотя пока только в черновом варианте :-)
Хотел поинтересоваться у уважаемого
Последовательный запуск программ, в том числе и батников, с поддержкой перезагрузки с последующим продолжением есть в MInstAll. »
Отличная программка у вас получилась :-)
Киньте свой PayPal мне в личку, с меня причитается :-)

Но есть один нюанс.
Вот моё содержание бат файла:

@echo off
call :isAdmin
if %errorlevel% == 0 (
goto :run
) else (
echo Requesting administrative privileges...
goto :UACPrompt
)
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
:run
set BAT=%~dp0Install.cmd
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v Install /t REG_SZ /d "%BAT%" /f
@echo.
@echo Begin process of installation of drivers
@echo.
timeout -t 2
REM shutdown -t 0 -r -f
echo Rebooting the system wait 6 sec ... >con
shutdown.exe -r -t 6 -c "The system will reboot after 6 sec ..."
exit /b
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B`


Пробую связать этот скрипт с MInstAll.
Но после перезагрузки появляется циклически и пропадает окно бат файла прописанного в RunOnce...

Если запускать скриптом всё идёт на отлично, так как и ожидается, а если из MInstAll - циклическое открытие и закрытие CMD до рестарта системы...
Может подскажите как это исправить?




© OSzone.net 2001-2012