Показать полную графическую версию : Твики реестра через [GuiRunOnce] -> RunOnceEx
Задача: затвикать реестр reg-файлами после установки XP SP2, которые находятся на дискете вместе c winnt.sif.
Но ничего не выходит, хотя cmdcons.cmd и bootcfg отрабатывают успешно. В чем может быть загвоздка?
winnt.sif
[GuiRunOnce]
"A:\RunOnceEx.cmd"
RunOnceEx.cmd
@ECHO OFF
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100
REG ADD %KEY% /V TITLE /D "Installing Applications" /f
REG ADD %KEY%\%i% /VE /D "Установка Recovery Console" /f
REG ADD %KEY%\%i% /V 1 /D "A:\cmdcons.cmd" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Отображать список ОС, сек" /f
REG ADD %KEY%\%i% /V 1 /D "bootcfg.exe /timeout 5" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Импорт настроек реестра" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hklm_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hkcu_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hku_xpprof_sp2.cmd" /f
SET /A i+=1
hkcu_xpprof_sp2.cmd
@echo off
title Импорт настроек HKCU
if exist hkcu_xpprof_sp2.reg regedit /s hkcu_xpprof_sp2.reg
hklm_xpprof_sp2.cmd
@echo off
title Импорт настроек HKLM
if exist hklm_xpprof_sp2.reg regedit /s hklm_xpprof_sp2.reg
hku_xpprof_sp2.cmd
@echo off
title Импорт настроек Default User
if not exist hku_xpprof_sp2.reg goto :EOF
reg load HKU\DefUser "%ALLUSERSPROFILE%\..\Default User\NTUSER.DAT"
if %errorlevel% EQU 0 (
regedit /s hku_xpprof_sp2.reg
reg unload HKU\DefUser
if %errorlevel% NEQ 0 (
echo Ошибка при выгрузке файла куста реестра!
pause >nul
goto :EOF
)
) else (
echo Ошибка при загрузке файла куста реестра!
pause >nul
)
SPV82
REG ADD %KEY%\%i% /V 1 /D "A:\hklm_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hkcu_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hku_xpprof_sp2.cmd" /f
Должно быть вот так
REG ADD %KEY%\%i% /V 1 /D "A:\hklm_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 2 /D "A:\hkcu_xpprof_sp2.cmd" /f
REG ADD %KEY%\%i% /V 3 /D "A:\hku_xpprof_sp2.cmd" /f
qeraser
Исправил неточность, но все равно импорта не происходит ни в одну из ветвей. Батники, вызываемые до и после в RunOnceEx отрабатывают успешно, а которые с реестром - нет
Прописал абслютные пути в *.cmd - заработало. Странно.
if exist A:\hkcu_xpprof_sp2.reg regedit /s A:\hkcu_xpprof_sp2.reg
SPV82
Зачем так сложно? Не проще ли с дискеты установить на Т-12 из cmdlines.txt? И вообще, почему вы из GuiRunOnce вызываете RunOnceEx? Это же дублирующие друг друга функции. Просто пропишите свои батники в GuiRunOnce. И в твиках все пути к разделам реестра должны быть другие - там же HKU\Defuser...
Vadikan
Не проще ли с дискеты установить на Т-12 из cmdlines.txt?
cmdlines.txt использовать не могу, т.к. системы устанавливаются с легальных ОЕМ-дистрибутивов в разных точках и времени на пересобирание образа c внедрением $OEM$ и т.д. тратить жалко, в этом случае проще заранее иметь дискету с winnt.sif и кучкой reg-файлов для HKLM, HKCU и Default User.
почему вы из GuiRunOnce вызываете RunOnceEx?
Чтобы выполнилось не после 1го входа в систему, а после 2го.
И в твиках все пути к разделам реестра должны быть другие - там же HKU\Defuser...
Разумеется, так оно и есть.
Проблема разрешилась - нужно было указать в батниках абсолютные пути до reg-файлов. Правда я так пока и не понял зачем полные пути, ведь батники запускаются из того же каталога, где лежат reg-файлы.
Petya V4sechkin
03-05-2007, 12:09
SPV82
cmdlines.txt использовать не могу, т.к. системы устанавливаются с легальных ОЕМ-дистрибутивов в разных точках и времени на пересобирание образа c внедрением $OEM$ и т.д. тратить жалко, в этом случае проще заранее иметь дискету с winnt.sif и кучкой reg-файлов для HKLM, HKCU и Default User.Есть еще одна возможность выполнять cmd-файлы до первого логона (на T-9), параметр UserExecute (http://oszone.net/2758#r15):
[SetupParams]
UserExecute="A:\hkcu_xpprof_sp2.cmd"
Правда я так пока и не понял зачем полные пути, ведь батники запускаются из того же каталога, где лежат reg-файлы.Но текущая папка вовсе не обязательно та же, откуда они запускаются.
Это можно поправить, вставив в начало cmd-файлов строчку:
CD /D "%~dp0"(только надо иметь в виду, что с сетевыми путями команда CD не работает).
Есть еще одна возможность выполнять cmd-файлы до первого логона (на T-9), параметр UserExecute:
Попробовал через параметр UserExecute. Проблема - выполняется только cmdcons.cmd из T-9.cmd. Остальное не выполняется. В чем грабли? Не могу понять где я ступил, два раза пробовал, пол вечера убил...
winnt.sif
[SetupParams]
UserExecute = "A:\T-9.cmd"
T-9.cmd
@echo off
A:\cmdcons.cmd
bootcfg /timeout 5
regedit /s A:\hkcu_xpprof_sp2.reg
A:\RunOnceEx.cmd
RunOnceEx.cmd
@ECHO OFF
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100
REG ADD %KEY% /V TITLE /D "Configuring system" /f
REG ADD %KEY%\%i% /VE /D "Импорт настроек реестра" /f
REG ADD %KEY%\%i% /V 1 /D "A:\hklm_xpprof_sp2.cmd" /f
SET /A i+=1
Petya V4sechkin
03-05-2007, 21:28
SPV82
Вы забыли привести содержимое cmdcons.cmd ;)
Если в конце Exit - удалите. Также попробуйте вызов с помощью Call:
T-9.cmd
@echo off
call A:\cmdcons.cmd
bootcfg /timeout 5
regedit /s A:\hkcu_xpprof_sp2.reg
call A:\RunOnceEx.cmd
exit
Почему бы все команды не собрать в один файл?
Вы забыли привести содержимое cmdcons.cmd ;)
@echo off
title Установка консоли восстановления Windows
for %%i in (c,d,e,f,g,q,w,r,t,y,u,i,o,p,s,h,j,k,l,z,x,v,n,m) do (
if exist %%i:\win51*.SP? %%i:\I386\winnt32.exe /cmdcons /unattend
)
Также попробуйте вызов с помощью Call
Попробовал, уже лучше - bootcfg и RunOnceEx отработали, но HKCU не отрабатывает даже вот так:
T-9.cmd
@echo off
call A:\cmdcons.cmd
bootcfg /timeout 5
call A:\hkcu_xpprof_sp2.cmd
call A:\RunOnceEx.cmd
exit
hkcu_xpprof_sp2.cmd
@echo off
title Импорт настроек HKCU
cd /D "%~dp0"
if exist hkcu_xpprof_sp2.reg regedit /s hkcu_xpprof_sp2.reg
Вот что происходит визуально (http://img147.imageshack.us/img147/4236/hkcubv4.png) как при "regedit /s A:\hkcu_xpprof_sp2.reg", так и при "call A:\hkcu_xpprof_sp2.cmd" в T-9.cmd
http://img147.imageshack.us/img147/4236/hkcubv4.png
Расшифровать с графики не знаю как и не понимаю причем тут boot.ini. Неужели на T-9 экспорт в HKCU невозможен? Или опять я туплю...
Petya V4sechkin
04-05-2007, 15:47
SPV
SPV82
У вас новый логин?
Может, вместо:
regedit /s A:\hkcu_xpprof_sp2.regсделать так:start /wait regedit /s A:\hkcu_xpprof_sp2.reg
У вас новый логин?
Это старый. Сохранился в кукисах для oszone.net. И что-то не понял как этот логин с форума удалить, в настройках профиля не нашел. Может, плохо искал?
сделать так:
Код:
start /wait regedit /s A:\hkcu_xpprof_sp2.reg
Может так будет лучше?
%comspec% /c start /wait regedit
Итак...
Пробовал через "start /wait regedit /s A:\hkcu_xpprof_sp2.reg". Не помогло. С "%comspec% /c" тоже.
Пробовал вынести все операции в единый пакетный файл. Не помогло.
Есть у кого-нибудь еще мысли по поводу настройки HKCU с дискеты на этапе Т-9 через UserExecute? Или на Т-12 с дискеты?
Иначе получается, что на данный момент единственный рабочий способ обработки веток реестра HKCU и Default user с дискеты это способ, описанный мной в самом первом сообщении этой темы, т.е. через RunOnceEx. Разубедите меня.
SPV82
Думаю, что если бы в добавили OEM папки сразу, то все уже бы давно работало. Понимаете, у каждой задачи есть рекомендуемые пути решения, а есть перректальные. Вы выбрали второй вариант, а разубеждать вас тут никто не будет...
Vadikan
Думаю, что если бы в добавили OEM папки сразу, то все уже бы давно работало
Дело в том, что при помощи $ОЕМ$-директорий и cmdlines.txt, размещенных на дискете вообще ничего не срабатывает. Этот вариант я неоднократно пробовал перед созданием данного топика и в дальнейшем пришел к решению через RunOnceEx, с которым сюда и пожаловал.
И вот даже сейчас, прочитав ваш ответ, решил повторить попытку через $ОЕМ$ и cmdlines.txt с дискеты. Но безрезальтатно. На T-12 ничего не происходит.
A:\
│ winnt.sif
│
└───$OEM$
│ cleanup.cmd
│ cmdcons.cmd
│ cmdlines.txt
│ hkcu.reg
│ hklm.reg
│ RunOnceEx.cmd
│ UserAccounts.cmd
│
└───$1
SourcePath_SP.vbs
SourcePath_WIN.vbs
A:\winnt.sif
Пробовал также с "OemFilesPath=A:\" и "OemFilesPath=A:\$OEM$" в секции [Unattended]
;SetupMgrTag
[Data]
AutoPartition=0
MsDosInitiated="0"
UnattendedInstall="Yes"
AutomaticUpdates=Yes
[Unattended]
UnattendMode=FullUnattended
OemSkipEula=Yes
OemPreinstall=Yes
TargetPath=\WINDOWS
UnattendSwitch="Yes"
WaitForReboot="No"
[GuiUnattended]
AdminPassword="ххх"
EncryptedAdminPassword=NO
AutoLogon=Yes
AutoLogonCount=1
OEMSkipRegional=1
TimeZone=180
OemSkipWelcome=1
[UserData]
ProductKey=ххххх-ххххх-ххххх-ххххх-ххххх
FullName="*"
OrgName=""
ComputerName=NONAME
[TapiLocation]
CountryCode=7
AreaCode=3522
[RegionalSettings]
LanguageGroup=5
SystemLocale=00000419
UserLocale=00000419
InputLocale=0419:00000419
[Branding]
BrandIEUsingUnattended=Yes
[URL]
Home_Page=about:blank
[Proxy]
Proxy_Enable=0
Use_Same_Proxy=1
[Identification]
JoinWorkgroup=WORKGROUP
[Networking]
InstallDefaultComponents=Yes
[Components]
msmsgs=Off
msnexplr=Off
zonegames=Off
templates=Off
deskpaper=Off
dialer=Off
mousepoint=Off
media_clips=Off
rec=Off
clipbook=Off
WMPOCM=Off
[Shell]
DefaultStartPanelOff = Yes
DefaultThemesOff = Yes
[WindowsFirewall]
Profiles=WindowsFirewall.TurnOffFirewall
[WindowsFirewall.TurnOffFirewall]
Mode=0
A:\$OEM$\cmdlines.txt
[COMMANDS]
"cmdcons.cmd"
"regedit /s hkcu.reg"
"bootcfg /timeout 5"
"UserAccounts.cmd"
"RunOnceEx.cmd"
A:\$OEM$\RunOnceEx.cmd
@ECHO OFF
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100
SET PATH2OEM=A:\$OEM$
REG ADD %KEY% /V TITLE /D "Installing Applications" /f
REG ADD %KEY%\%i% /VE /D "Import registry keys" /f
REG ADD %KEY%\%i% /V 1 /D "regedit /s %PATH2OEM%\hklm.reg" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Cleaning up and reboot..." /f
REG ADD %KEY%\%i% /V 1 /D "%PATH2OEM%\cleanup.cmd" /f
SET /A i+=1
EXIT
Petya V4sechkin
05-05-2007, 18:31
SPV82
Скажите еще раз, пожалуйста, почему не хотите добавить папку $OEM$ на CD?
Мне просто любопытно.
Petya V4sechkin
Не могу, т.к. дистрибутивы винды - легальные ОЕМ'ки. Я прихожу к клиенту и устанавливаю систему с CD клиента, быстрой возможности пересобрать дистрибутив с внедрением $OEM$ и записью на болванку прямо на месте я не нахожу... Таким образом, выход один - иметь дискету с winnt.sif с кучкой cmd и reg файлов для автоустановки и настройки системы как и было поведано мной в первом сообщении.
ps Есть еще в теории вариант установки с жесткого диска, но вот на практике $OEM$-папки и cmdlines.txt на жестком диске у меня тоже не обрабатывались.
Petya V4sechkin
05-05-2007, 18:56
SPV82
дистрибутивы винды - легальные ОЕМ'киВ принципе, от добавления папки $OEM$ дистрибутив не перестанет быть легальным / лицензионным.
Я прихожу к клиенту и устанавливаю систему с CD клиентаТо есть, это какие-то специфические клиенты? Они опасаются "закладок" или чего-то еще? :)
В принципе, от добавления папки $OEM$ дистрибутив не перестанет быть легальным / лицензионным.Конечно.
Ладно, в общем делайте так. Просто с жесткого диска или дискеты запускайте один сценарий (http://forum.oszone.net/showpost.php?p=404318), который импортирует твики во все профили, и второй сценарий, который импортирует эти же твики в текущий профиль (обычный regedit /s). Все.
Petya V4sechkin
В принципе, от добавления папки $OEM$ дистрибутив не перестанет быть легальным / лицензионным.
Для этого как минимум нужен ноутбук с СD-RW-приводом и некоторое количество времени на интеграцию.
Не проще ли иметь в кармане обычную дискету?
Vadikan
Просто с жесткого диска или дискеты запускайте один сценарий, который импортирует твики во все профили
Спасибо за скрипт, пригодится. У меня просто reg load в Default User\ntuser.dat как в первом сообщении описывал.
А для исключения обработки файла реестра текущего пользователя достаточно добавить еще одно условие:
for /f "usebackq tokens=1,1* delims==" %%i in (`dir /b "%profiles%"`) do (
if /i "%%i" neq "All Users" (
if /i "%%i" neq %USERNAME% (
reg load HKU\custom "%profiles%\%%i\NTUSER.DAT"
regedit /s tweak.reg
reg unload HKU\custom
)
)
)
Это если не было переименования учетной записи.
Еще есть такая утилитка Modify Profile (http://www.optimumx.com/download/ModifyProfile.zip)
Modify Profile [version 1.21]
Loads Registry hives and modifies profiles for users who are not currently
logged in. Can also be used to modify new user profiles (Default User).
Syntax: ModifyProfile.exe /PROFILE:profilename|ALL /REG:filename /KEYNAME:name
Examples:
ModifyProfile.exe /PROFILE:ALL /REG:"C:\TEMP\New Stuff.reg" /KEYNAME:TempHive
ModifyProfile.exe /PROFILE:"C:\Documents and Settings\Default User\NTUser.dat" /
REG:C:\TEMP\NewStuff.reg /KEYNAME:TempHive
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.