Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Windows (http://forum.oszone.net/forumdisplay.php?f=7)
-   -   Реестр - почему не работает REG_SZ, как Hex1? (http://forum.oszone.net/showthread.php?t=312156)

Mersim 29-02-2016 16:29 2611437

Реестр - почему не работает REG_SZ, как Hex1?
 
Известно, что 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 2611458

Цитата:

Цитата Mersim
Почему же тогда не работает: »

А почему должен работать?

Mersim 29-02-2016 16:53 2611460

Вопросом на вопрос? ОК.

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

Amigos 01-03-2016 08:57 2611687

Цитата:

Цитата Mersim
Почему же тогда не работает: »

Вы его в блокноте набивали что ли?
Внесите изменения вручную в реестр, экспортируйте нужную ветку в reg файл, сравните полученный с самописным
Скрытый текст
REGEDIT4, как минимум

Цитата:

Цитата Mersim
почему не должен, если все остальные работают? »

остальные тоже сочинялись в блокноте?

Mersim 01-03-2016 15:59 2611811

Amigos,

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

Когда я рег-файл формирую в программе, то все остальные строки легко формируются в цикле:
(курсивом - переменные)
Код:

[sKey]
"sValue"=hex(sType):sData

и лишь для RG_SZ
Код:

[sKey]
"sValue"="sData"

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

Iska 01-03-2016 16:18 2611817

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

Mersim 01-03-2016 17:21 2611842

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 2611920

Цитата:

Цитата Mersim
Впрочем, я пытался в разных вариантах :) Чем черт не шутит :) »

Вы издеваетесь, что ли?!

Код:

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

Скрытый текст

Скрытый текст

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

Mersim 01-03-2016 22:35 2611925

Да... Жестко я лопухнулся.
Все работает и под 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
Вы издеваетесь, что ли?! »

Я решил, что это издевка с твоей стороны...
Код:

Под тег код(!) засунуть инструкцию.
Потом только допер прочитать ее БУКВАЛЬНО.
.

Iska 01-03-2016 23:22 2611947

Цитата:

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

Раздел-то он импортирует? Импортирует.

Цитата:

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

Ну да. А у Вас как было/есть?

Цитата:

Цитата Mersim
А если hex(n) все таки использовать, то читабельность рег-файла падает до нуля и ниже. »

Добавляйте тут же, рядом комментарий с обычным текстом. Я лично так и делал, когда использовал тип REG_EXPAND_SZ. И овцы будут целы, и волки сыты.

Mersim 01-03-2016 23:54 2611955

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

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

Цитата:

Цитата Iska
Раздел-то он импортирует? Импортирует. »

Ага :) Проигнорив при этом часть ключей :) Не... так дела не делаются...

Пользуясь случаем - вот по этой теме нет ли, часом, каких соображений?
Пусть, даже, под тегом код :)
.

Iska 02-03-2016 00:33 2611962

Цитата:

Цитата Mersim
Там на начальном этапе экспортированные выдержки из реестра должны быть взглядом оценены с листа. Так что вариант с 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

Цитата:

Цитата Mersim
Пользуясь случаем - вот по этой теме нет ли, часом, каких соображений? »

Разве что самому брать и писать. На WSH или PoSH (предпочтительнее).

Mersim 02-03-2016 03:49 2611984

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

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

Цитата:

Цитата Iska
Разве что самому брать и писать. На WSH или PoSH (предпочтительнее). »

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

Iska 02-03-2016 04:01 2611986

Цитата:

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

Вполне читабельно.


Время: 05:52.

Время: 05:52.
© OSzone.net 2001-