Показать полную графическую версию : [решено] Импорт в реестр параметров, содержащих переменные в значениях
Привет
Не подскажите, как сделать, путь к файлу в ключе реестра, переменным.
Например:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\open\command\: "C:\Program Files\QuickSFV\QuickSFV.EXE "%1""
Petya V4sechkin
01-01-2012, 07:54
Wu-Tang, если я правильно понял, что вы имели в виду, можно использовать тип REG_EXPAND_SZ и переменные окружения, например %ProgramFiles%
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\open\command]
@=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,\
00,73,00,25,00,5c,00,51,00,75,00,69,00,63,00,6b,00,53,00,46,00,56,00,5c,00,\
51,00,75,00,69,00,63,00,6b,00,53,00,46,00,56,00,2e,00,45,00,58,00,45,00,20,\
00,22,00,25,00,31,00,22,00,00,00
Petya V4sechkin,
Думаю правильно.
Те ключ должен писаться с правильным указанием диска, на котором есть папка program files.
Пример вижу, только не понял, как так обработать ключи с другими путями, например:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV\UninstallString: "C:\Program Files\QuickSFV\QSFVUNST.EXE C:\Program Files\QuickSFV\"
А вот все:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\QuickSFV Shell Extension\: "{906b0e6e-61ce-11d3-8ee2-0060080a7242}"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32\: "C:\Program Files\QuickSFV\QSFVShll.dll"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32\ThreadingModel: "Apartment"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\: "QuickSFV Shell Extension"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shellex\ContextMenuHandlers\QuickSFV Shell Extension\: "{906b0e6e-61ce-11d3-8ee2-0060080a7242}"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.CKZ\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.CRC\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.CSV\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.MD5\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.PAR\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.SFV\: "File_Verification_Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\open\command\: "C:\Program Files\QuickSFV\QuickSFV.EXE "%1""
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\verify_all\command\: "C:\Program Files\QuickSFV\QuickSFV.EXE DOALL "%1""
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\verify_all\: "&Verify All"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\open\: "&Open"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\Shell\: "open"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\DefaultIcon\: "C:\Program Files\QuickSFV\QuickSFV.EXE,0"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\File_Verification_Database\: "File Verification Database"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{906b0e6e-61ce-11d3-8ee2-0060080a7242}: "QuickSFV Shell Extension"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\CTXMENU_NOVERBS: ""
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV\DisplayName: "QuickSFV (Remove only)"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV\UninstallString: "C:\Program Files\QuickSFV\QSFVUNST.EXE C:\Program Files\QuickSFV\"
Petya V4sechkin
01-01-2012, 08:21
как так обработать
Сначала либо создать руками, либо командой Reg Add в командной строке.
Потом экспортировать в REG-файл.
apozlevich
01-01-2012, 10:52
Petya V4sechkin, а как они получаются? Может написать какой-нибудь конвертер? На входе - REG_SZ с переменной, на выходе REG_EXPAND_SZ.
Petya V4sechkin,
Что-то не совсем понятно, ну вот сверху ключи, я привел, что далее, я должен сделать, с каждым или всю пачку можно конвертнуть?
Все же я не совсем понимаю, как эта процедура делается.
apozlevich,
Да, если бы вы это сделали, то было бы чудесно.
Petya V4sechkin
02-01-2012, 08:33
Wu-Tang, для примера возьмем ключ:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32\: "C:\Program Files\QuickSFV\QSFVShll.dll"
Создаете CMD-файл:
Reg Add HKLM\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32 /VE /T REG_EXPAND_SZ /D %%ProgramFiles%%\QuickSFV\QSFVShll.dll /F
Reg Export HKLM\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32 Example1.reg
и выполняете.
На выходе получаете Example1.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32]
@=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,\
00,73,00,25,00,5c,00,51,00,75,00,69,00,63,00,6b,00,53,00,46,00,56,00,5c,00,\
51,00,53,00,46,00,56,00,53,00,68,00,6c,00,6c,00,2e,00,64,00,6c,00,6c,00,00,\
00
Следующий пример:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV\UninstallString: "C:\Program Files\QuickSFV\QSFVUNST.EXE C:\Program Files\QuickSFV\"
CMD-файл:
Reg Add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV /V UninstallString /T REG_EXPAND_SZ /D "%%ProgramFiles%%\QuickSFV\QSFVUNST.EXE %%ProgramFiles%%\QuickSFV\\" /F
Reg Export HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV Example2.reg
На выходе Example2.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV]
"UninstallString"=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,\
69,00,6c,00,65,00,73,00,25,00,5c,00,51,00,75,00,69,00,63,00,6b,00,53,00,46,\
00,56,00,5c,00,51,00,53,00,46,00,56,00,55,00,4e,00,53,00,54,00,2e,00,45,00,\
58,00,45,00,20,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,\
00,6c,00,65,00,73,00,25,00,5c,00,51,00,75,00,69,00,63,00,6b,00,53,00,46,00,\
56,00,5c,00,00,00
Для ознакомления с параметрами команды Reg Add можете почитать:
Reg Add /?
apozlevich
02-01-2012, 10:37
Petya V4sechkin, а можно простым скриптом
@echo off
Reg Add %1 /VE /T REG_EXPAND_SZ /D %2 /F
Reg Export %1 %3
(Просто одна команда вместо двух. Использовал ваш код, не проверял, скрипт не "отказоусточив")
Запускается так: script.cmd <ветвь реестра> <параметр> <файл вывода>
Wu-Tang, я имел в виду не конвертер из REG_SZ в REG_EXPAND_SZ, а просто подстановку правильных значений переменных. Хотя сейчас понимаю, что это было бы не совсем правильно. Сегодня займусь конвертером, позже.
Petya V4sechkin
02-01-2012, 10:44
не проверял
И не заметили разницу между первым и вторым примером.
apozlevich
02-01-2012, 11:27
Petya V4sechkin, это верно :) Но ведь все заработает?
Кстати, подскажите, а как еще можно получить REG_EXPAND_SZ?
Petya V4sechkin
02-01-2012, 16:53
Но ведь все заработает?
Нет, конечно, для второго примера не заработает.
как еще можно получить REG_EXPAND_SZ
Руками создать.
apozlevich
03-01-2012, 13:58
Petya V4sechkin, какая разница между первым и вторым примером?
Petya V4sechkin, какая разница между первым и вторым примером? »
Значение «По умолчанию» рассматривается как особый случай и задаётся отдельным параметром для «reg.exe». В Вашем примере использован именно данный параметр.
Во втором же примере задаётся значение обычного именованного параметра.
Не вижу смысла в конвертерах каких-то. Либо руками создали и экспортировали, либо REG ADD, как разложил Petya V4sechkin, с последующим экспортом.
Более того, не вижу смысла гонять туда-сюда - без разницы, какой файл выполнять, REG, CMD или оба.
regedit /s tweak.reg && call tweak.cmd
Аналогичная тема [решено] Создание в реестре расширенного строкового параметра REG_EXPAND_SZ (http://forum.oszone.net/showthread.php?t=222537)
apozlevich
04-01-2012, 16:22
Собственно, у меня после применения .reg-файла запускается скрипт, который импортирует оставшиеся значения в реестр.
Petya V4sechkin,
Переварил вроде.
Есть 2 вопроса: в одном примере вы используете ключ /ve, в другом /v, как узнать когда какой использовать? И в одном - строчка заканчивается одним \, в другом \\. Когда как надо?
apozlevich,
Reg Add %1 /VE /T REG_EXPAND_SZ /D %2 /F
Reg Export %1 %3 »
Что-то не вкурю, а как правильно делать подстановку в ваш шаблон?
Может все же возьметесь написать конвертер? http://s.rimg.info/f289947570463c1e91fa6db1b3f5472c.gif (http://smajliki.ru/smilie-34089063.html)
Vadikan,
regedit /s tweak.reg && call tweak.cmd »
А как этим скриптом пользоваться?
apozlevich
05-01-2012, 12:27
Wu-Tang, это не шаблон и не надо туда ничего подставлять. Запускается так: script.cmd <ветвь реестра> <параметр> <файл вывода> » Но сейчас я повнимательней посмотрел на пост Petya V4sechkin и понял, что мой скрипт действительно неправилен. Да, сейчас может займусь конвертером.
А как этим скриптом пользоваться? »
Это зависит от ваших задач. А как вы пользуетесь своим файлом с твиками реестра?
apozlevich
05-01-2012, 14:28
regedit /s tweak.reg && call tweak.cmd »
Wu-Tang, мне кажется, Vadikan имел в виду то, что из файла tweaks.reg импортируются все значения, кроме REG_EXPAND_SZ, а потом с помощью скрипта tweak.cmd импортируются значения REG_EXPAND_SZ. Скрипт может содержать что-то вроде примеров Petya V4sechkin Reg Add HKLM\SOFTWARE\Classes\CLSID\{906b0e6e-61ce-11d3-8ee2-0060080a7242}\InProcServer32 /VE /T REG_EXPAND_SZ /D %%ProgramFiles%%\QuickSFV\QSFVShll.dll /F или Reg Add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QuickSFV /V UninstallString /T REG_EXPAND_SZ /D "%%ProgramFiles%%\QuickSFV\QSFVUNST.EXE %%ProgramFiles%%\QuickSFV\\" /FДля ознакомления с параметрами команды Reg Add можете почитать:
Reg Add /? »А писать конвертер я больше не вижу смысла, так как действительно проще сделать импорт значений REG_EXPAND_SZ дополнительным скриптом.
Я так понимаю, что главная проблема в том, что параметр типа «REG_EXPAND_SZ» представлен в *.reg-файле в нечитабельном виде (набором hex)?!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.