PDA

Показать полную графическую версию : Реестр - почему не работает REG_SZ, как Hex1?


Mersim
29-02-2016, 16:29
Известно, что REG_SZ - имеет тип 1, а, например, REG_MULTI_SZ = 7, REG_DWORD = 4 etc.

Почему же тогда не работает:
REGEDIT4
[HKEY_CURRENT_USER\!__2Del]
"2del_REG_SZ_h1"=hex(1):Simple Text

Ни параметр не создается, ни значение имеющегося не меняется.
Хотя, в интерактивном режиме RegEdit пишет, что:

Registry Editor
Information in ..\RRC\2Del_Reg_Sz.reg has been successfully entered into the registry on My Computer.

Очередной косяк венды?
Win 2003
.

Iska
29-02-2016, 16:47
Почему же тогда не работает: »
А почему должен работать?

Mersim
29-02-2016, 16:53
Вопросом на вопрос? ОК.

А почему не должен, если все остальные работают?
Почему он, находясь в единой иерархии с остальными, требует к себе индивидуального подходя?
Почему он один не вписывается в общую, казалось бы, неплохую нотацию?
.

Amigos
01-03-2016, 08:57
Почему же тогда не работает: » Вы его в блокноте набивали что ли?
Внесите изменения вручную в реестр, экспортируйте нужную ветку в reg файл, сравните полученный с самописным REGEDIT4, как минимум
почему не должен, если все остальные работают? »остальные тоже сочинялись в блокноте?

Mersim
01-03-2016, 15:59
Amigos,

Если бы руками, то можно было и не акцентироваться на этом.

Когда я рег-файл формирую в программе, то все остальные строки легко формируются в цикле:
(курсивом - переменные)
[sKey]
"sValue"=hex(sType):sData

и лишь для RG_SZ
[sKey]
"sValue"="sData"

т.е. из-за этого RG_SZ я вынужден вставлять проверку типа, когда для всех остальных нотация предусматривает обращение по типу непосредственно.
.

Iska
01-03-2016, 16:18
Mersim, попробуйте использовать новый, юникодный формат — «Windows Registry Editor Version 5.00», причём в виде:
"Value E"=hex(1):<REG_SZ (as comma-delimited list of hexadecimal values representing a UTF-16LE NUL-terminated string)>
а вовсе не в виде «hex(1):Simple Text».

Отсюда: Windows Registry: REG files - Wikipedia, the free encyclopedia (https://en.wikipedia.org/wiki/Windows_Registry#.REG_files)

Mersim
01-03-2016, 17:21
Iska, спасибо. Я с этой страницы сюда и пришел :)

1. Мне очень не хочется уходить в юникод
2. Оно так же не работет :(

Если ты акцентируешься на угловых скобках - то это ведь пример. В реале их не надо.

Впрочем, я пытался в разных вариантах :) Чем черт не шутит :)
; BOF
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\!__2Del]
"2del"="is deleted"
"2dell"=dword:00003039
"2Delll"=hex(7):73,00,64,00,73,00,64,00,66,00,67,00,73,00,64,00,67,00,00,00,64,\
00,66,00,64,00,66,00,67,00,00,00,00,00
"SZ_Sim"="Simple notation"
; all of lines below are ignored
"SZ_Hex1"=hex(1):Hex notation
"SZ_Hex2"=hex(1):"Hex notation"
"SZ_Hex3"=hex(1):<Hex notation>
"SZ_Hex4"=hex(1):<"Hex notation">
"Value E"=hex(1):<REG_SZ (as comma-delimited list of hexadecimal values representing a UTF-16LE NUL-terminated string)>
; EOFФормат файла - UCS-2 LE BOM
Я для чистоты эксперимента вначале экспортнул его из RegEdit в формате по умолчанию (не меняя на NT), а потом в нем делал правки. Руками :)
.

Iska
01-03-2016, 22:25
Впрочем, я пытался в разных вариантах :) Чем черт не шутит :) »
Вы издеваетесь, что ли?!

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Sample Key]
"Sample parameter"=hex(1):1C,04,30,04,3C,04,30,04,20,00,3C,04,4B,04,3B,04,30,04,20,00,40,04,30,04,3C,04,43,04,21,00,00 ,00

http://i.imgur.com/iX9AFDU.png
http://i.imgur.com/hTVusiJ.png
Ясно же сказано: «as comma-delimited list of hexadecimal values representing a UTF-16LE NUL-terminated string». А у Вас что?!

Mersim
01-03-2016, 22:35
Да... Жестко я лопухнулся.
Все работает и под 4 и под 5.

"SZ_Hex5"=hex(1):48,00,65,00,78,00,20,00,6E,00,6F,00,74,00,61,00,74,00,69,00,6F,00,6E,00

Вывод:
параметр hex(n): не только указывает на тип Data, которые идут следом,
но и вменяет hex-формат записи этих Data.

Но, меня это не лечит совсем. В любом случае REG_SZ надо отслеживать - или чтобы сконвертить в hex, или чтобы записать, не используя тип. А если hex(n) все таки использовать, то читабельность рег-файла падает до нуля и ниже.

Ну а косяк с тупым поведением RegEdit, когда он рапортует ОК при явных ошибках импорта, остается на совести Билла.
.

Вы издеваетесь, что ли?! »
Я решил, что это издевка с твоей стороны... Под тег код(!) засунуть инструкцию.
Потом только допер прочитать ее БУКВАЛЬНО.
.

Iska
01-03-2016, 23:22
Ну а косяк с тупым поведением RegEdit, когда он рапортует ОК при явных ошибках импорта, остается на совести Билла. »
Раздел-то он импортирует? Импортирует.

Но, меня это не лечит совсем. В любом случае REG_SZ надо отслеживать - или чтобы сконвертить в hex, или чтобы записать, не используя тип. »
Ну да. А у Вас как было/есть?

А если hex(n) все таки использовать, то читабельность рег-файла падает до нуля и ниже. »
Добавляйте тут же, рядом комментарий с обычным текстом. Я лично так и делал, когда использовал тип REG_EXPAND_SZ. И овцы будут целы, и волки сыты.

Mersim
01-03-2016, 23:54
Iska, дык, у меня было для себя, что там говорить... Тоже - с комментариями. Через Ексель ворочал.

А щаз надо сделать, чтобы людям отдать. Там на начальном этапе экспортированные выдержки из реестра должны быть взглядом оценены с листа. Так что вариант с hex-нотацией отпадает.

Раздел-то он импортирует? Импортирует. »
Ага :) Проигнорив при этом часть ключей :) Не... так дела не делаются...

Пользуясь случаем - вот по этой теме (http://forum.oszone.net/thread-312150.html) нет ли, часом, каких соображений?
Пусть, даже, под тегом код :)
.

Iska
02-03-2016, 00:33
Там на начальном этапе экспортированные выдержки из реестра должны быть взглядом оценены с листа. Так что вариант с hex-нотацией отпадает. »
Ничуть не отпадает. Я же написал, как делать:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Sample Key]
; Мама мыла раму!
"Sample parameter"=hex(1):1C,04,30,04,3C,04,30,04,20,00,3C,04,4B,04,3B,04,30,04,20,00,40,04,30,04,3C,04,43,04,21,00,00 ,00

Пользуясь случаем - вот по этой теме нет ли, часом, каких соображений? »
Разве что самому брать и писать. На WSH или PoSH (предпочтительнее).

Mersim
02-03-2016, 03:49
Да нечитабельно это будет, когда за несколько сотен вхождений, а из них надо отобрать нужные-ненужные.

Я тут даже определенный волюнтаризм задумал... уж коль нет вариантов эксопртировать культурно...
В своей нотации писать. И в одну строку.

Разве что самому брать и писать. На WSH или PoSH (предпочтительнее). »
Ну, я к этому, получается, и иду. На VB буду писать. Из реестра - в однострочный вариант для чтения глазами и открыживания и конвертор в нормальный рег-файл. Как-то так... Проще не получается.
.

Iska
02-03-2016, 04:01
Да нечитабельно это будет, когда за несколько сотен вхождений, а из них надо отобрать нужные-ненужные. »
Вполне читабельно.




© OSzone.net 2001-2012