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

Компьютерный форум 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
Благодарности: 4

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




Когда в 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
Можно автоматизировать прогресс, чтобы не вписывать числа самому, я например сделал так:

Код: Выделить весь код
:progress
  set /A val = %val% + 4
  AutoIt3.exe progress.au3 %val%>nul 2>&1
exit /b
+4 потому, что у меня 25 программ которые ставятся, 100 / 25 = 4
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:31, 10-05-2017

 

Новый участник


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

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


Как прикрутить progress.au3 к win 8 ? Имеет ли значение разрядность системы ? (win32->AutoIt3.exe / win64->AutoIt3_x64.exe)

Отправлено: 15:53, 28-05-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


Не тестировал на Win8, для 7ки, берем win32->AutoIt3.exe. Не важно, что в install.wim, 32 или 64, берем всегда 32 разрядный autoit. Если не работает на 8ке, по мануалу выше, значит нужно отреверсить узнать какой контрол используется в инсталляторе 8ки, попробую поковырять под 8ку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:08, 31-05-2017 | #3


Новый участник


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

Профиль | Отправить 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
в папке %CD%\update\
создаем файл e7bd5e04efc1fd404b92e404042f871a

Файл может быть любым, я в автосборщике делаю с каждым билдом новый такой файл.

Содержание файла msgbox.vbs (Нужен если пользователь вынул флешку или диск)

Код: Выделить весь код
iBtn = Msgbox("Для продолжения установки подключите съемный носитель с установочными файлами Windows.", vbRetryCancel+vbInformation+vbSystemModal, "Настройка Windows")

If iBtn = 4 Then
	WScript.Echo 1
Else
	WScript.Echo 0
End If
Ну и собственно Install.cmd, тут пишем то, чего нужно поставить.

Еще рекомендую вот это для закручивания гаек в винде при установке.
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
Еще стоит обратить внимание на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\CA\Certificates\FEE449EE0E3965A5246F000E87F DE2A065FD89D4
Если ставится NET, без некоторых обновлений винды (https://support.microsoft.com/en-us/help/2661254) на длину ключа, есть шанс в 0.000000001%, что похачат
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:21, 03-06-2017 | #4


(*.*)


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

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


Цитата DuMakDuk:
По поводу улучшения качества зондирования ПО (может пригодится) »
И этим отключаем WinSAT, который выполняет оценку производительности после установки, а также убиваем диагностику эффективности электропитания.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:37, 03-06-2017 | #5


Новый участник


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

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


Верно, просто брал из своего конфига, по моим религиозным соображениям эти вещи были отключены.

Отправлено: 02:06, 06-06-2017 | #6


Ветеран


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

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


Цитата DuMakDuk:
по моим религиозным соображениям »
Вот уж, точно — «ваистену» по «религиозным», бо пользуется не научный подход, а вера .

Отправлено: 03:33, 06-06-2017 | #7



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista » 7 / 2008 R2 - Кошерный Progress Bar при исполнении файла SetupComplete.cmd (Windows 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




 
Переход