Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание автоматического инсталлятора драйверов с несколькими перезагрузками (http://forum.oszone.net/showthread.php?t=332188)

Hegehog1989 28-12-2017 20:43 2787799

Создание автоматического инсталлятора драйверов с несколькими перезагрузками
 
Ребята, помогите пожалуйста, у нас на форуме никто в зуб ногой не умеет создавать и править такие скрипты.
В общем предисловие. Есть пакет дров проверенных и собранных с любовью) Специфика установки подразумевает несколько перезагрузок, и есть скрипт взятый от китайцев, который устанавливает все одной установкой. Разложили в 4 папки, получилось 4 скрипта.
Нужно чтобы был один главный скрипт, который запускал бы эти 4 скрипта с перезагрузками. Я не программист, примерно так себе это представляю.
скрипты уже есть, их просто нужно подправить.
ссылка на драйверпак 4pda файл Minimal Driver Pack Auto Install.7z

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

alpap 29-12-2017 00:54 2787857

Цитата:

Цитата Hegehog1989
Разложили в 4 папки »

зачем, а если надо то куда, это 4 пользователя в локалке?

Hegehog1989 29-12-2017 01:25 2787861

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

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

mwz 29-12-2017 01:53 2787866

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 2787871

Скрипт может быть и один (и так будет даже лучше), а вот вызовы указываются с параметром, по которому скрипт может судить, на каком из этапов он был вызван на исполнение, и что ему следует делать.

Update:
Цитата:

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

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

Hegehog1989 29-12-2017 08:30 2787879

Спасибо, будем пробовать

Сrack 29-12-2017 09:49 2787887

Цитата:

Цитата Hegehog1989
Я не программист »

Для не программистов есть готовые программы, где все просто делается. Последовательный запуск программ, в том чисте и батников, с поддержкой перезагрузки с последующим продолжением есть в MInstAll.

Porsche-928 29-12-2017 12:56 2787911

Цитата:

Цитата mwz
Всё это может быть выполнено одним скриптом »

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

Если не получится с скриптом, то попробую ваш способ с MInstAll
Цитата:

Цитата Сrack
Для не программистов есть готовые программы »

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

mwz 29-12-2017 14:00 2787922

Цитата:

Цитата Porsche-928
Чаще всего пользователи кидают папку куда хотят, из-за этого и возникает большинство проблем... »

Если обратите внимание, в строке "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" :)

Цитата:

Цитата Iska
пусть остаётся памятником »

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

Porsche-928 29-12-2017 16:24 2787949

Цитата:

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

Спасибо.
Да в будущем можно конечно всё доработать, но для начало нужно чтоб хоть как-то заработало вообще :-)
Так что СПАСИБО!!!!

Porsche-928 06-01-2018 17:59 2789347

Привет всем.
Спасибо за помощь , всё получилось :-)
Хотя пока только в черновом варианте :-)
Хотел поинтересоваться у уважаемого
Цитата:

Цитата Сrack
Последовательный запуск программ, в том числе и батников, с поддержкой перезагрузки с последующим продолжением есть в 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 до рестарта системы...
Может подскажите как это исправить?


Время: 11:37.

Время: 11:37.
© OSzone.net 2001-