|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista » 7 / 2008 R2 - Кошерный Progress Bar при исполнении файла SetupComplete.cmd (Windows 7) |
|
7 / 2008 R2 - Кошерный Progress Bar при исполнении файла SetupComplete.cmd (Windows 7)
|
Новый участник Сообщения: 12 |
![]() Когда в SetupComplete.cmd идет установка тонны программ, не совсем ясно когда это безобразие закончится, к сожалению как использовать прогресс бар при инсталляции не описывается, если это вообще возможно, поэтому решил сделать свой костыль. Качаем Autoit, кидаем AutoIt3.exe в нашу папку с SetupComplete.cmd Создаем файл progress.au3 следующего содержания: #NoTrayIcon Opt("MustDeclareVars", 1) Main() Func Main() If $CmdLine[0] == 0 Or _ StringIsDigit($CmdLine[1]) == 0 Or _ $CmdLine[1] < 0 Or _ $CmdLine[1] > 100 _ Then Exit EndIf Local $hControl = ControlGetHandle("[CLASS:NativeHWNDHost]", "", "[CLASS:msctls_progress32; INSTANCE:1]") Local $lStyle = _WinAPI_GetWindowLong($hControl, -16) If $lStyle <> 0x50000000 Then _WinAPI_SetWindowLong($hControl, -16, 0x50000000) _WinAPI_SetWindowLong($hControl, -20, 0x00000000) EndIf _SendMessage($hControl, 0x402, $CmdLine[1], 0) EndFunc ;==>Main Func _WinAPI_GetWindowLong($hWnd, $iIndex) Local $sFuncName = "GetWindowLongW" If @AutoItX64 Then $sFuncName = "GetWindowLongPtrW" Local $aResult = DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hWnd, "int", $iIndex) If @error Or Not $aResult[0] Then Return SetError(@error + 10, @extended, 0) Return $aResult[0] EndFunc ;==>_WinAPI_GetWindowLong Func _WinAPI_SetWindowLong($hWnd, $iIndex, $iValue) _WinAPI_SetLastError(0) ; as suggested in MSDN Local $sFuncName = "SetWindowLongW" If @AutoItX64 Then $sFuncName = "SetWindowLongPtrW" Local $aResult = DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hWnd, "int", $iIndex, "long_ptr", $iValue) If @error Then Return SetError(@error, @extended, 0) Return $aResult[0] EndFunc ;==>_WinAPI_SetWindowLong Func _WinAPI_SetLastError($iErrorCode, Const $_iCurrentError = @error, Const $_iCurrentExtended = @extended) DllCall("kernel32.dll", "none", "SetLastError", "dword", $iErrorCode) Return SetError($_iCurrentError, $_iCurrentExtended, Null) EndFunc Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult") Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam) If @error Then Return SetError(@error, @extended, "") If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn] Return $aResult EndFunc ;==>_SendMessage SetupComplete.cmd пример с прогресс баром: @echo off call:progress 40 windows6.1-kb3177467-x64.msu /quiet /norestart call:progress 50 windows6.1-kb3042058-x64.msu /quiet /norestart call:progress 60 vcredist2005_x64.exe /q call:progress 70 vcredist2005_x86.exe /q call:progress 80 vcredist2008_x64.exe /q call:progress 90 vcredist2008_x86.exe /q call:progress 100 exit :progress set val=%~1 AutoIt3.exe progress.au3 %val%>nul 2>&1 exit /b +4 потому, что у меня 25 программ которые ставятся, 100 / 25 = 4 |
|
Отправлено: 16:31, 10-05-2017 |
Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Как прикрутить progress.au3 к win 8 ? Имеет ли значение разрядность системы ? (win32->AutoIt3.exe / win64->AutoIt3_x64.exe)
|
Отправлено: 15:53, 28-05-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Не тестировал на Win8, для 7ки, берем win32->AutoIt3.exe. Не важно, что в install.wim, 32 или 64, берем всегда 32 разрядный autoit. Если не работает на 8ке, по мануалу выше, значит нужно
|
Отправлено: 01:08, 31-05-2017 | #3 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Не обязательно софт складывать в папке OEM, там все файлы копируются на hdd, лишнее движение, проще создать папку с именем %по вкусу% в корне и от туда выполнять инсталляцию.
Для этого в файле SetupComplete.cmd пишем так: @echo off :start for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do if exist %%i:\update\e7bd5e04efc1fd404b92e404042f871a set UPDATEPATH=%%i:\update if not defined UPDATEPATH ( call:MsgBoxQuestion ) cd /d %UPDATEPATH% call Install.cmd>nul goto:end :MsgBoxQuestion for /f %%i in ('cscript //NoLogo msgbox.vbs') do set MsgBoxAnswer=%%i if %MsgBoxAnswer% == 1 ( goto:start ) else ( goto:do_nothing ) :end start /min rd /s /q %windir%\Setup\Scripts>nul start /min %windir%\System32\shutdown.exe -r -f -t 0 exit :do_nothing start rd /s /q %windir%\Setup\Scripts>nul exit создаем файл e7bd5e04efc1fd404b92e404042f871a Файл может быть любым, я в автосборщике делаю с каждым билдом новый такой файл. Содержание файла msgbox.vbs (Нужен если пользователь вынул флешку или диск) iBtn = Msgbox("Для продолжения установки подключите съемный носитель с установочными файлами Windows.", vbRetryCancel+vbInformation+vbSystemModal, "Настройка Windows") If iBtn = 4 Then WScript.Echo 1 Else WScript.Echo 0 End If Еще рекомендую вот это для закручивания гаек в винде при установке. https://blogs.technet.microsoft.com/...-utility-v1-0/ На чистой системе, под виртуалкой задаешь групповые политики и потом экспортируешь в файл *.pol и можно применять к другой машине через установку, либо вручную. Задавать политики напрямую через реестр, кривой способ, политики работать будут, но если их потом просматривать через mmc не будет видно, какие политики применены, да и вероятность того, что это может слететь вполне себе имеет место быть. У себя сделал так: LGPO.exe /m GPO.pol call:progress_val 100 По поводу улучшения качества for %%? in ( "\Microsoft\Windows\Application Experience\AitAgent" "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" "\Microsoft\Windows\Application Experience\ProgramDataUpdater" "\Microsoft\Windows\Autochk\Proxy" "\Microsoft\Windows\Customer Experience Improvement Program\Consolidator" "\Microsoft\Windows\Customer Experience Improvement Program\KernelCeipTask" "\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip" "\Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector" "\Microsoft\Windows\PI\Sqm-Tasks" "\Microsoft\Windows\Power Efficiency Diagnostics\AnalyzeSystem" "\Microsoft\Windows\Windows Error Reporting\QueueReporting" "\Microsoft\Windows\Maintenance\WinSAT" "\Microsoft\Windows\Media Center\ActivateWindowsSearch" "\Microsoft\Windows\Media Center\ConfigureInternetTimeService" "\Microsoft\Windows\Media Center\DispatchRecoveryTasks" "\Microsoft\Windows\Media Center\ehDRMInit" "\Microsoft\Windows\Media Center\InstallPlayReady" "\Microsoft\Windows\Media Center\mcupdate" "\Microsoft\Windows\Media Center\MediaCenterRecoveryTask" "\Microsoft\Windows\Media Center\ObjectStoreRecoveryTask" "\Microsoft\Windows\Media Center\OCURActivate" "\Microsoft\Windows\Media Center\OCURDiscovery" "\Microsoft\Windows\Media Center\PBDADiscovery" "\Microsoft\Windows\Media Center\PBDADiscoveryW1" "\Microsoft\Windows\Media Center\PBDADiscoveryW2" "\Microsoft\Windows\Media Center\PvrRecoveryTask" "\Microsoft\Windows\Media Center\PvrScheduleTask" "\Microsoft\Windows\Media Center\RegisterSearch" "\Microsoft\Windows\Media Center\ReindexSearchRoot" "\Microsoft\Windows\Media Center\SqlLiteRecoveryTask" "\Microsoft\Windows\Media Center\UpdateRecordPath" ) do call:disable_task %%? :disable_task set task_name=%~1 schtasks /Change /TN "%task_name%" /DISABLE>nul 2>&1 exit /b Если ставится NET, без некоторых обновлений винды (https://support.microsoft.com/en-us/help/2661254) на длину ключа, есть шанс в 0.000000001%, что похачат ![]() |
Отправлено: 00:21, 03-06-2017 | #4 |
(*.*) Сообщения: 36567
|
Профиль | Сайт | Отправить PM | Цитировать Цитата DuMakDuk:
|
||
------- Отправлено: 13:37, 03-06-2017 | #5 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Верно, просто брал из своего конфига, по моим религиозным соображениям эти вещи были отключены.
|
Отправлено: 02:06, 06-06-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата DuMakDuk:
![]() |
|
Отправлено: 03:33, 06-06-2017 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Общее - [статья] SetupComplete.cmd | Vadikan | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 496 | 12-11-2022 21:01 | |
Общее - [статья]OOBE.cmd/SetupComplete.cmd/FirstLogon.cmd | alegz81 | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 19 | 17-04-2018 08:18 | |
Темы и Стили - Изменение позиции Progress Bar'а | dmistof | Оформление Windows 11/ 10 / 8 / 7 / Vista | 5 | 27-05-2015 08:17 | |
Установка - Устанвка через setupcomplete.cmd | scuscumbric | Microsoft Windows 8 и 8.1 | 0 | 01-05-2014 18:01 | |
VBS/WSH/JS - VBScript скрытие cmd окна при исполнении bat-фаила | gausssom | Скриптовые языки администрирования Windows | 5 | 27-08-2012 08:19 |
|