Войти

Показать полную графическую версию : [решено] Импорт твиков реестра - экспериментальный подход.


Андрамедон
06-11-2008, 15:26
Итак, имею два файла: HKCU.reg и HKLM.reg. Это нужные мне твики реестра, которые надо импортировать во время автоматической установки Windows. OEM папки я не использую, соответственно будет использоваться метод svcpack.inf. По правилам, которые я считаю истиной в последней инстанции, твики из HKCU.reg должны импортироваться до первого входа в систему (на Т-13), а твики из HKLM.reg - при первом входе в систему, то есть из RunOnceEx. В статьях, которые я прочитал на oszone.net, предлагалось использовать для этих целей .CMD файлы, которые отрабатывают на Т-13, внося все данные в реестр. А вот какая идея родилась у меня. Берем HKCU.reg и в начало (или в конец) добавляем строки:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\666]
"RunTweaksHKLM"="REGEDIT /S %systemdrive%\\HKLM.reg"

Далее файлы HKCU.reg и HKLM.reg упаковываем в SFX архив от архиватора RAR, обзываем его, например, MyTweaks.exe, в настройках SFX архива устанавливаем: "Путь для распаковки" - %systemdrive%, "Выполнить после распаковки" - REGEDIT /S %systemdrive%\HKCU.reg, "Режим вывода информации" - Скрыть всё. После этого прицепляем MyTweaks.exe в качестве аддона к UpdatePack. Теперь, по логике вещей, должно произойти следующее: во время установки Windows на Т-13 запускается MyTweaks.exe, он распаковывает HKCU.reg и HKLM.reg в %systemdrive% (у большинства это диск "С") и после распаковки выполняет команду REGEDIT /S %systemdrive%\HKCU.reg, которая просто вносит информацию в реестр из HKCU.reg (в том числе и нужные записи для RunOnceEx), а при первом входе в систему отрабатывается команда из RunOnceEx - REGEDIT /S %systemdrive%\HKLM.reg, которая вносит информацию в реестр из HKLM.reg.

Заметьте, здесь не используется никаких .CMD файлов.
Собственно, главный вопрос - прокатит ли такой способ? Возможно, я в чем-то ошибся, буду рад выслушать вашу критику, дополнения.

Vadikan
06-11-2008, 17:21
"RunTweaksHKLM"="REGEDIT /S %systemdrive%\\HKLM.reg" »
Это не сработает, потому что для работы переменных нужен параметр REG_EXPAND_SZ, а у вас REG_SZ. Поэтому в RunOnceEx (http://oszone.net/2762) и используется командный файл - переменная считывается в момент импорта, а в реестр уже импортируется ее значение.

Заметьте, здесь не используется никаких .CMD файлов. »Зато используете SFX и аддон. Не очень понятно, в чем выгода такого подхода...

Андрамедон
06-11-2008, 20:23
Vadikan, в статье "Использование файла svcpack.inf для установки программ и импорта твиков реестра" (http://oszone.net/6724) есть такой код для .CMD:
@echo off
:: Укажите путь к папке, в которой находится исполняемый файл, относительно корня компакт-диска
SET folder=install
:: Определяем букву компакт-диска
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY%\999 /V 1 /D "%CDROM%\%folder%\file.exe" /f

Я его переделал так:
@echo off
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY%\666 /V RunTweaksHKLM /D "REGEDIT /S %systemdrive%\HKLM.reg" /f


и запустил из под винды, потом запустил regedit и увидел, что в RunOnceEx добавилась переменная типа REG_SZ (во всяком случае именно так показал regedit) RunTweaksHKLM = REGEDIT /S C:\HKLM.reg, могу дать скриншот.
Може я что-то не так понял? Объясни, тем более в статье RunOnceEx (http://oszone.net/2762) есть скриншот, где ясно видно, что в RunOnceEx добавляются переменные типа REG_SZ :dont-know

Vadikan
06-11-2008, 20:36
тем более в статье RunOnceEx есть скриншот, где ясно видно, что в RunOnceEx добавляются переменные типа REG_SZ »
Туда добавляются параметры типа REG_SZ - на скриншоте видно, что в значении параметров нет переменных. Они обрабатываются при запуске командного файла, а в реестр вносится возвращаемое значение переменной. В общем, я просто перефразировал предыдущее сообщение.

Андрамедон
07-11-2008, 13:30
на скриншоте видно, что в значении параметров нет переменных. »
Ах, да, понял теперь о чем разговор, ступил малость :) , ведь переменная %systemdrive% будет непонятна Regedit'у. Написал вот так:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\666]
"RunTweaksHKLM"="REGEDIT /S C:\\HKLM.reg"

Реально работает, правда, теряется универсальность - диска "C" может и не быть (хотя это и мало вероятно, я всегда ставлю систему на диск "C", он у меня есть всегда).

Зато используете SFX и аддон. Не очень понятно, в чем выгода такого подхода... »
Дело даже не в выгоде, а просто в альтернативе, хотя лично мне намного проще и понятнее потыкать на кнопки и переключатели в настройках SFX, а потом прилепить его к UpdatePack'у, чем долбить по клаве сочиняя .CMD, в которых я не особо секу, а потом прописывать их в svcpack.inf... Ну ленивый я человек, любящий всем сердцем GUI :)

Vadikan
07-11-2008, 20:11
Реально работает, правда, теряется универсальность - диска "C" может и не быть »
О чем и речь. Статьи же написаны для общего случая, а не для конкретного. чем долбить по клаве сочиняя .CMD, в которых я не особо секу »
Пример есть в статье, достаточно адаптировать его под свой случай.а потом прописывать их в svcpack.inf... »
Ну да, название файла прописать - это огромный труд :)

В общем, работет, вас устраивает - чудесно!




© OSzone.net 2001-2012